1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include "generator.ih"
void Generator::polymorphicSpecializations(ostream &out) const
{
key(out);
out.put('\n');
if (d_options.tagMismatches().value == Options::ON)
out << "extern char const *idOfTag_[];\n"; // cf. idoftag.cc
for (auto &poly: d_polymorphic)
{
out <<
"template <>\n"
"struct TagOf<" << poly.second << ">\n"
"{\n"
" static Tag_ const tag = Tag_::" << poly.first << ";\n"
"};\n"
"\n";
}
out <<
"template <>\n"
"struct TagOf<EndPolyType_>\n"
"{\n"
" static Tag_ const tag = Tag_::END_TAG_;\n"
"};\n"
"\n";
for (auto &poly: d_polymorphic)
{
out <<
"template <>\n"
"struct TypeOf<Tag_::" << poly.first << ">\n"
"{\n"
" using type = " << poly.second << ";\n"
"};\n"
"\n";
}
out <<
"template <>\n"
"struct TypeOf<Tag_::END_TAG_>\n"
"{\n"
" using type = EndPolyType_;\n"
"};\n"
"\n";
}
|