mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 12:05:50 +00:00
[C++] Fix union type handling on object api in C++17 (#6745)
This commit is contained in:
@@ -929,10 +929,12 @@ class CppGenerator : public BaseGenerator {
|
||||
}
|
||||
|
||||
std::string UnionVectorVerifySignature(const EnumDef &enum_def) {
|
||||
return "bool Verify" + Name(enum_def) + "Vector" +
|
||||
auto name = Name(enum_def);
|
||||
auto type = opts_.scoped_enums ? name : "uint8_t";
|
||||
return "bool Verify" + name + "Vector" +
|
||||
"(flatbuffers::Verifier &verifier, " +
|
||||
"const flatbuffers::Vector<flatbuffers::Offset<void>> *values, " +
|
||||
"const flatbuffers::Vector<uint8_t> *types)";
|
||||
"const flatbuffers::Vector<" + type + "> *types)";
|
||||
}
|
||||
|
||||
std::string UnionUnPackSignature(const EnumDef &enum_def, bool inclass) {
|
||||
@@ -2941,10 +2943,15 @@ class CppGenerator : public BaseGenerator {
|
||||
}
|
||||
case BASE_TYPE_UTYPE: {
|
||||
value = StripUnionType(value);
|
||||
code += "_fbb.CreateVector<uint8_t>(" + value +
|
||||
".size(), [](size_t i, _VectorArgs *__va) { "
|
||||
"return static_cast<uint8_t>(__va->_" +
|
||||
value + "[i].type); }, &_va)";
|
||||
auto type = opts_.scoped_enums ? Name(*field.value.type.enum_def)
|
||||
: "uint8_t";
|
||||
auto enum_value = "__va->_" + value + "[i].type";
|
||||
if (!opts_.scoped_enums)
|
||||
enum_value = "static_cast<uint8_t>(" + enum_value + ")";
|
||||
|
||||
code += "_fbb.CreateVector<" + type + ">(" + value +
|
||||
".size(), [](size_t i, _VectorArgs *__va) { return " +
|
||||
enum_value + "; }, &_va)";
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
||||
Reference in New Issue
Block a user