C++: Fixed generated header file cannot be compiled when the type of key is enum class

This commit is contained in:
takaken1994 2015-11-14 22:25:35 +09:00
parent 3f1c4b41f6
commit c4966370e2
1 changed files with 12 additions and 2 deletions

View File

@ -154,7 +154,10 @@ static void GenEnum(const Parser &parser, EnumDef &enum_def,
std::string &code = *code_ptr;
std::string &code_post = *code_ptr_post;
GenComment(enum_def.doc_comment, code_ptr, nullptr);
code += GenEnumDecl(enum_def, opts) + " {\n";
code += GenEnumDecl(enum_def, opts);
if (opts.scoped_enums)
code += " : " + GenTypeBasic(parser, enum_def.underlying_type, false);
code += " {\n";
for (auto it = enum_def.vals.vec.begin();
it != enum_def.vals.vec.end();
++it) {
@ -311,7 +314,14 @@ static void GenTable(const Parser &parser, StructDef &struct_def,
code += "const char *val) const { return strcmp(" + field.name;
code += "()->c_str(), val); }\n";
} else {
code += GenTypeBasic(parser, field.value.type, false);
if (opts.scoped_enums &&
field.value.type.enum_def &&
IsScalar(field.value.type.base_type)) {
code += GenTypeGet(parser, field.value.type, " ", "const ", " *",
true);
} else {
code += GenTypeBasic(parser, field.value.type, false);
}
code += " val) const { return " + field.name + "() < val ? -1 : ";
code += field.name + "() > val; }\n";
}