gpt4 book ai didi

具有最小样板的 C++ 类 "upgrade"

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:27 24 4
gpt4 key购买 nike

假设我有以下内容:

struct C1 { int w; }
struct B1 { int x; int y; int z; C1 c; };
struct A1 { int x; int y; int z; B1 b; };
struct C2 { long w; short t; }
struct B2 { int x; int y; int z; C2 c; };
struct A2 { int x; int y; int z; B2 b; };

我想实现这个功能

A2 upgrade(const A1 &a1);

它获取 a1 对象,并从中创建一个 a2 对象(假设 a2.w = a1.wa2.t = 6)。

一个理想的(但据我所知是不可能的)实现如下所示:

A2 upgrade(const A1 &a1) {
dynamic d = to_dyn(a1);
d["b"]["c"]["w"] = (long)d["b"]["c"]["w"];
d["b"]["c"]["z"] = (short)5;
A2 a2 = from_dyn(d);
return a2;
}

在实际的 C++ 中,我能多接近这个?

最佳答案

由于所有类都是聚合,最简洁直接的方法是使用聚合初始化:

A2 upgrade(const A1& a) {
return {a.x, a.y, a.z, {a.b.x, a.b.y, a.b.z, {a.b.c.w, (short)5}}};
}

C++ 没有任何工具可以迭代类型成员,无论是编译时还是运行时。
有人正在研究向该语言添加这样的编译时工具的提案,但它仍然需要做很多工作。

关于具有最小样板的 C++ 类 "upgrade",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26829851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com