cpp11 为名称不同但元素完全相同的结构赋值?

问题描述 投票: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;
    
    // but is there a simple way like:
    // y = x.z;
    
}

我调查了

memcpy
,但在我的真实情况下,
X
更复杂和动态长度,
memcpy
看起来对我没有帮助。谢谢任何建议

c++ c++11 struct
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.