假设我有以下内容:
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.w
和 a2.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/