Если вы буквально хотите, чтобы логическое значение проверяло, является ли T == A
, тогда вы можете использовать is_same
, доступный в C ++ 11 как std::is_same
, или до TR1 как std::tr1::is_same
:
const bool T_is_A = std::is_same<T, A>::value;
Вы можете тривиально написать этот маленький класс самостоятельно:
template <typename, typename> struct is_same { static const bool value = false;};
template <typename T> struct is_same<T,T> { static const bool value = true;};
Часто вам может оказаться удобнее упаковать код ветвления в отдельные классы или функции, которые вы специализируете для A
B
, поскольку это даст вам условное время компиляции .В отличие от этого, проверка if (T_is_A)
может быть выполнена только во время выполнения.