【发布时间】:2018-02-23 21:38:46
【问题描述】:
我在这里读到了 C++ 中的可区分联合:http://www.stroustrup.com/C++11FAQ.html#unions
如果我想对递归类型进行联合怎么办?
例如,考虑以下情况:
class Obj {
enum class Type { kInt, kVec } type;
union {
int i;
std::vector<Obj> v;
};
Obj& operator=(const Obj& o) { ... }
};
在这种情况下,由于递归引用,编译器会抱怨尝试使用不完整的对象Obj。如何以干净的方式解决这个问题?
谢谢
【问题讨论】:
-
有一种观点认为现代 C++ 中应该避免/实际上不需要联合。
-
在 C++ 中,使用
std::variant -
@Ron 我不知道,谢谢。您能否提供一些关于这所学校的论点的参考资料以及替代方案应该是什么?在这个问题的背景下,我仍然很想知道如何正确使用联合。
-
@ale64bit 这里有很多关于 SO 的参考资料。
-
联合 with non-POD types 很讨厌。例如,
v需要调用它的构造函数和析构函数,你必须采取额外的步骤来确保它已经完成。我看看能不能找到链接。