This commit is contained in:
Wouter van Oortmerssen
2016-10-12 14:39:36 -07:00
13 changed files with 77 additions and 21 deletions

View File

@@ -490,7 +490,24 @@ class CppGenerator : public BaseGenerator {
}
code += "]; }\n\n";
}
// Generate type traits for unions to map from a type to union enum value.
if (enum_def.is_union) {
for (auto it = enum_def.vals.vec.begin();
it != enum_def.vals.vec.end();
++it) {
auto &ev = **it;
if (it == enum_def.vals.vec.begin()) {
code += "template<typename T> struct " + enum_def.name + "Traits {\n";
}
else {
code += "template<> struct " + enum_def.name + "Traits<" + WrapInNameSpace(*ev.struct_def) + "> {\n";
}
code += " static const " + enum_def.name + " enum_value = " + GenEnumValDecl(enum_def, ev.name, parser_.opts) + ";\n";
code += "};\n\n";
}
}
if (enum_def.is_union) {
code += UnionVerifySignature(enum_def) + ";\n\n";
}