#include <iostream>
using namespace std;
enum EnumFirst {
Foo,
Bar
};
enum EnumSecond {
Foo2,
Bar2,
Baz2
};
template<typename T>
const char *toString(int val)
{
if (std::is_same<T, EnumFirst>::value) {
switch (val) {
case EnumFirst::Foo:
return "Foo";
case EnumFirst::Bar:
return "Bar";
}
} else if (std::is_same<T, EnumSecond>::value) {
switch (val) {
case EnumSecond::Foo2:
return "Foo2";
case EnumSecond::Bar2:
return "Bar2";
case EnumSecond::Baz2:
return "Baz2";
}
}
return "Unknown";
}
int main() {
int a = 1;
cout << toString<EnumFirst>(a) << endl;
cout << toString<EnumSecond>(a) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBFbnVtRmlyc3QgewoJRm9vLAoJQmFyCn07CgplbnVtIEVudW1TZWNvbmQgewoJRm9vMiwKCUJhcjIsCglCYXoyCn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjb25zdCBjaGFyICp0b1N0cmluZyhpbnQgdmFsKQp7CglpZiAoc3RkOjppc19zYW1lPFQsIEVudW1GaXJzdD46OnZhbHVlKSB7CgkJc3dpdGNoICh2YWwpIHsKCQljYXNlIEVudW1GaXJzdDo6Rm9vOgoJCQlyZXR1cm4gIkZvbyI7CgkJY2FzZSBFbnVtRmlyc3Q6OkJhcjoKCQkJcmV0dXJuICJCYXIiOwoJCX0KCX0gZWxzZSBpZiAoc3RkOjppc19zYW1lPFQsIEVudW1TZWNvbmQ+Ojp2YWx1ZSkgewoJCXN3aXRjaCAodmFsKSB7CgkJY2FzZSBFbnVtU2Vjb25kOjpGb28yOgoJCQlyZXR1cm4gIkZvbzIiOwoJCWNhc2UgRW51bVNlY29uZDo6QmFyMjoKCQkJcmV0dXJuICJCYXIyIjsKCQljYXNlIEVudW1TZWNvbmQ6OkJhejI6CgkJCXJldHVybiAiQmF6MiI7CgkJfQoJfQoJcmV0dXJuICJVbmtub3duIjsKfQoKaW50IG1haW4oKSB7CgkKCWludCBhID0gMTsKCWNvdXQgPDwgdG9TdHJpbmc8RW51bUZpcnN0PihhKSA8PCBlbmRsOwoJY291dCA8PCB0b1N0cmluZzxFbnVtU2Vjb25kPihhKSA8PCBlbmRsOwoJCglyZXR1cm4gMDsKfQ==