Как выбирать поведение класса в зависимости от типов, переданных в шаблоны
К примеру у меня есть класс A с шаблонным параметром T
template<typename T>
class A{
int test;
};
Я хочу чтоб тип поля test определялся в зависимости от типа T. К примеру, если T - double, то test - string, иначе test - int.
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
template<typename T>
class A{
int test;
};
template<>
class A <double>{
string test;
};
Автор решения: HolyBlackCat
→ Ссылка
Специализация шаблона, показанная в соседнем ответе, удобна если нужно заменить бо́льшую часть содержимого класса. Все, что менять не нужно, придется копипастить.
А если нужно поменять только тип одного поля, то можно так:
template <typename T>
class A
{
std::conditional_t<std::is_same_v<T, double>, std::string, int> test;
};