More C++ Idioms/Type Safe Enum
From Wikibooks, the open-content textbooks collection
Contents |
[edit] Intent
[edit] Also Known As
[edit] Motivation
[edit] Solution and Sample Code
template<typename def, typename inner = typename def::type> struct right_enum : def { typedef typename def::type type; inner v; right_enum(type v) : v(static_cast<type>(v)) {} operator inner () const {return v;} };
Example:
struct color_def { enum type { red, green, blue }; }; typedef right_enum<color_def> color; // use int as enum holder data type (in common platforms) typedef right_enum<color_def, unsigned char> color; // use uchar as enum holder // usage: void f(color p) { p = color::green; } int main() { color p = color::red; f(p); }