Go to the documentation of this file.
30 #define _detail_ARMARX_MAKE_ENUM_CONVERTERS(...) _detail_ARMARX_MAKE_ENUM_CONVERTERS_i(__VA_ARGS__)
31 #define _detail_ARMARX_MAKE_ENUM_CONVERTERS_i(r, data, elem) \
33 return #data "::" #elem;
35 #define ARMARX_MAKE_ENUM_CONVERTERS(type, ...) \
36 static_assert(std::is_enum_v<type>, \
37 "Parameters to ARMARX_MAKE_ENUM_CONVERTERS must be enum types"); \
38 inline std::string to_string(type v) \
40 using base = std::underlying_type_t<type>; \
43 ARMARX_VARIADIC_FOR_EACH(_detail_ARMARX_MAKE_ENUM_CONVERTERS, type, __VA_ARGS__) \
45 throw std::invalid_argument{"Unknown enum value " + std::to_string(static_cast<base>(v))}; \
47 inline std::ostream& operator<<(std::ostream& out, type v) \
49 return out << to_string(v); \
51 inline type operator++(type& x) \
53 return x = (type)(((int)(x) + 1)); \
55 inline type operator++(type& x, int) \
58 x = (type)(((int)(x) + 1)); \
62 #define ARMARX_MAKE_ENUM_AND_CONVERTERS(name, ...) \
67 ARMARX_MAKE_ENUM_CONVERTERS(name, __VA_ARGS__)