You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++11中如何实现元素一致的不同结构体(含嵌套)间的赋值?

解决方案

1. 让嵌套结构体与Y共享类型

这是最直接的方案,修改X的定义,把嵌套的匿名结构体替换成Y类型,这样就能直接用y = x.z完成赋值:

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

struct X
{
    Y z; // 直接复用Y类型,替代原匿名嵌套结构体
    int c = 0;
};

int main()
{
    X x{ {1,2}, 3 };
    Y y;
    y = x.z; // 现在可以直接赋值
}

2. 为Y添加转换支持(不修改X的情况)

如果无法修改X的定义(比如X是第三方库的结构体),可以给Y添加转换构造函数或赋值运算符重载,利用decltype(X::z)获取X中嵌套结构体的类型:

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

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

    // 转换构造函数
    Y(const decltype(X::z)& other) : a(other.a), b(other.b) {}

    // 赋值运算符重载
    Y& operator=(const decltype(X::z)& other) {
        a = other.a;
        b = other.b;
        return *this;
    }
};

int main()
{
    X x{1,2,3};
    Y y;
    y = x.z; // 支持直接赋值
}

3. 结构化绑定简化赋值(C++17及以上)

如果不想修改任何结构体定义,可以用C++17的结构化绑定一次性提取成员,简化赋值代码:

int main()
{
    X x{1,2,3};
    Y y;
    auto [a, b] = x.z;
    y = {a, b};
    // 或者直接初始化:
    // Y y{x.z.a, x.z.b};
}

内容的提问来源于stack exchange,提问作者furynerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:42:39