我有两个结构,这两个结构的某些部分具有完全相同的元素类型(和名称),我如何为一个分配另一个的值?
如下所示:
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
看起来对我没有帮助。谢谢任何建议
在您的示例中,您可以重写代码以读取:
struct Y
{
int a = 0;
int b = 0;
};
struct X
{
Y z;
int c = 0;
};
现在它是相同的结构。
有没有简单的方法,比如: 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;