Возможно ли сделать время компиляции Type -> Enum Series
отображение?
Иллюстрируя на примере:
Допустим, у меня есть Type
и перечисляемое значение:
typedef int Type;
enum Enumerated { Enum1, Enum2, Enum3, Enum4 };
и теперь я как-то утверждаю следующее: "давайте свяжем Enum1
и Enum4
с типом Type
(пока не знаю, как это реализовать).
Теперь я хочу иметь возможность проверить следующее (лучше сделать это с помощью mpl во время компиляции):
Если какой-то произвольный тип и перечисление фактически отображаются друг на друга:
template <typename ArbitraryType, Enumerated E>
struct check_at_compile_time {
// Somehow tricky evaluate this
static const bool value;
};
, чтобы получить следующие результаты:
check_at_compile_time<Type, Enum1>::value evaluates to TRUE
check_at_compile_time<Type, Enum2>::value evaluates to FALSE
check_at_compile_time<Type, Enum4>::value evaluates to TRUE
check_at_compile_time<int, Enum3>::value evaluates to FALSE
Если кто-то знает хороший способ реализовать это, пожалуйста, помогите мне. Может быть, что-то, используя boost::mpl
, я не уверен.
Спасибо.