Skip to content

Instantly share code, notes, and snippets.

@matpen
Last active April 26, 2017 07:50
Show Gist options
  • Save matpen/8e1d7df1ce0e3a387345cb7998196a42 to your computer and use it in GitHub Desktop.
Save matpen/8e1d7df1ce0e3a387345cb7998196a42 to your computer and use it in GitHub Desktop.
rttr enum registration test
#include <rttr/registration>
#include <iostream>
enum class TestEnum { First = 1, Second = 2 };
RTTR_REGISTRATION
{
using namespace rttr;
registration::enumeration<TestEnum>("TestEnum")
(
value("First", TestEnum::First),
value("Second", TestEnum::Second)
);
}
int main(int /*argc*/, char** /*argv*/)
{
//print booleans as text
std::cerr << std::boolalpha;
//check if we can get the type
rttr::type type = rttr::type::get<TestEnum>();
std::cerr << "type is valid: " << type.is_valid() << "\n";
std::cerr << "type is enum: " << type.is_enumeration() << "\n";
std::cerr << "\n";
//check if we can get the enumeration
rttr::enumeration enumeration = type.get_enumeration();
std::cerr << "enum is valid: " << enumeration.is_valid() << "\n";
std::cerr << "enum name: " << enumeration.get_name() << "\n";
std::cerr << "\n";
//print enumeration names
std::cerr << "enum names:\n";
for (const auto& name : enumeration.get_names())
std::cerr << name << "\n";
std::cerr << "\n";
//get an enumeration value as a variant
rttr::variant value = enumeration.name_to_value("Second");
std::cerr << "value is valid: " << value.is_valid() << "\n";
std::cerr << "value type: " << value.get_type().get_name() << "\n";
std::cerr << "value as int: " << value.to_int() << "\n";
std::cerr << "\n";
//convert the variant (TODO this does not work)
bool convertedOk;
TestEnum converted = value.convert<TestEnum>(&convertedOk);
std::cerr << "converted ok: " << convertedOk << "\n";
std::cerr << "converted is first: " << (converted == TestEnum::First) << "\n";
std::cerr << "converted is second: " << (converted == TestEnum::Second) << "\n";
std::cerr << "converted as int: " << static_cast<int>(converted) << "\n";
std::cerr << "\n";
//extract the value from the variant (TODO however, this works)
TestEnum extracted = value.get_value<TestEnum>();
std::cerr << "extracted is first: " << (extracted == TestEnum::First) << "\n";
std::cerr << "extracted is second: " << (extracted == TestEnum::Second) << "\n";
std::cerr << "extracted as int: " << static_cast<int>(extracted) << "\n";
std::cerr << "\n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment