このコードはエラーなしでコンパイルされますが、期待どおりに動作するかどうかは疑問です。そのようなネスティングは許可されていますか?私はboostとC++を使うことはできません。C++:それが属するクラスを含む共用体
class Node;
typedef struct Value {
ValueTag type;
union {
std::int32_t integerValue;
std::float_t floatValue;
bool boolValue;
std::vector<Node> arrayValue;
std::unordered_map<std::string, Node> dictionaryValue;
};
} Value;
class Node {
private:
Value m_value;
public:
virtual ~Node();
};
組合は、コンストラクタとデストラクタを処理しません。したがって、非PODでの共用体の使用は安全ではありません(std :: vectorは安全ではありません)。 std :: variantとboost :: variantを参照してください。 –
質問には関係ありませんが、なぜ 'typedef struct ... 'を使用していますか?構造体はクラスに似ており、構造体名はクラス名のような型です。 –
私はCの世界から来たので。 – Ariel