如何为名称不同但元素和类型完全相同的结构赋值(C++11)?

问题描述 投票:0回答:2

我有两个结构。 两个结构的某些部分具有完全相同的元素类型(和名称)。

如何给一个人赋值?

如下所示:

struct X
{
    struct {
        int a = 0;
        int b = 0;
    } z;
    int c = 0;
};

struct Y
{
    int a = 0;
    int b = 0;
};

int main()
{
    X x{ 1,2,3 };
    Y y;
    // I know i can do:
    y.a = x.z.a;
    y.b = x.z.b;

    // Is there a simple way like:
    // y = x.z;
}

我调查了

memcpy
,但在我的真实情况下,
X
在长度上要复杂得多和动态得多。
memcpy
看起来对我帮助不大。

c++ c++11 struct variable-assignment class-members
2个回答
2
投票

在您的示例中,您可以重写代码以读取:

struct Y
{
    int a = 0;
    int b = 0;
};

struct X
{
    Y z;
    int c = 0;
};

现在它相同的结构。


1
投票

有没有简单的方法,比如: y = x.z;

Y
decltype(X::z)
不同。因此,没有任何进一步的调整是不可能的。

一种方法是,为Y提供

复制赋值运算符
重载,它可以接受
decltype(X::z)
类型,并对
Y
进行赋值。

struct Y
{
    int a = 0;
    int b = 0;

    using Z_t = decltype(X::z);
    Y& operator=(const Z_t& z)
    {
        a = z.a;
        b = z.b;
        return *this;
    }
};

现在你可以写了

X x{ 1,2,3 };
Y y;

y = x.z;

在 godbolt.org 观看现场演示

© www.soinside.com 2019 - 2024. All rights reserved.