Мне нужен шаблон C ++, который, учитывая тип и объект этого типа, может принимать решение на основе того, является ли тип целым числом или нет, и в то же время иметь возможность доступа к реальным объектам. Я попробовал это
template <typename T, T &N>
struct C {
enum { Value = 0 };
};
template <int &N>
struct C<int, N> {
enum { Value = N };
};
но это не работает. Есть ли способ добиться чего-то подобного?
Редактировать
То, чего я пытался добиться, было что-то вроде этого, что случилось бы во время компиляции:
if (type is int) {
return IntWrapper<int_value>
else {
return type
}
Вы можете фактически передавать указатели или ссылки на объекты в экземпляре шаблона, например, так:
struct X {
static const int Value = 5;
};
template <X *x>
struct C {
static const int Value = (*x).Value;
};
X x;
std::cout << C<&x>::Value << std::endl; // prints 5
но, очевидно, все это завершается инициализацией шаблона, выводя тип x
, и x
также необходимо объявить глобально. Бесполезно то, что я пытаюсь сделать, что, по-моему, невозможно во время компиляции.