Как выбирать поведение класса в зависимости от типов, переданных в шаблоны

К примеру у меня есть класс 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;
};
→ Ссылка