Если вы хотите иметь возможность указать только один аргумент шаблона для Test
, вам нужно объявить параметр шаблона по умолчанию, как Shmoopty предлагает .
Также возможно частично специализироваться для различных значений параметров:
// This base template will be used whenever the second parameter is
// supplied and is not -1.
template<class T, int num = -1>
class Test
{
public:
T testvar;
Test()
{
testvar = 10;
cout << "Testvar: " << testvar << endl;
cout << "Param: " << num << endl;
}
};
// This partial specialisation will be chosen
// when the second parameter is omitted (or is supplied as -1).
template<class T, int num>
class Test<T, -1>
{
public:
T testvar;
Test()
{
testvar = 5;
cout << "Testvar: " << testvar << endl;
}
};
Это устраняет необходимость в операторах if
или switch
, что делает его незначительно более быстрым (тестирование во время выполнения не выполняется) и позволяет "прививать" дополнительные случаи позже в виде дополнительных частичных специализаций. (Хотя какой подход яснее, это вопрос личного вкуса.)