Enums
RTTR allows also to register enumerated constants (enums). Therefore use the function registration::enumeration().
It has following synopsis:
template<typename Enum_Type>
name
the declared name of this enum
#include <rttr/registration>
using namespace rttr;
enum class E_Alignment
{
AlignLeft = 0x0001,
AlignRight = 0x0002,
AlignHCenter = 0x0004,
AlignJustify = 0x0008
};
{
registration::enumeration<E_Alignment>("E_Alignment")
(
value("AlignLeft", E_Alignment::AlignLeft),
value("AlignRight", E_Alignment::AlignRight),
value("AlignHCenter", E_Alignment::AlignHCenter),
value("AlignJustify", E_Alignment::AlignJustify)
);
}
In order to add the individual enumerators you have to use the ()
operator of the returned bind object. Then you call for every enumerator you want to add, the function value().
It has following synopsis:
template<typename Enum_Type>
The name is a const char*
and the value is the enum value.
The class enumeration contains several meta information about an enum with conversion functions between the value representation and its literal representation.
How to use the enumeration class shows following example:
using namespace rttr;
if (enum_type && enum_type.is_enumeration())
{
enumeration enum_align = enum_type.get_enumeration();
std::string name = enum_align.value_to_name(E_Alignment::AlignHCenter);
std::cout << name; // prints "AlignHCenter"
variant var = enum_align.name_to_value(name);
E_Alignment value = var.get_value<E_Alignment>(); // stores value 'AlignHCenter'
}