Я хотел бы определить явную специализацию функции шаблона в файле cpp. Это возможно? Чтобы быть более конкретными, у меня есть следующий код, который компилируется без ошибок:Специализация функций члена шаблона класса без шаблона
//class.h
class myclass
{
public:
/* Constructor */
myclass();
/* Trigger fcn */
template<typename T> T Trigger(T rn);
private:
/* Specializations of the templated Trigger(...) function */
template<> int Trigger<int>(int rn)
{
int_do(rn);
}
template<> double Trigger<double>(double rn)
{
double_do(rn);
}
}
Однако я имея определения в файле заголовок выглядит странно для меня, так что я хотел бы отделить определение от деклараций, что-то вроде этого:
//class.h
class myclass
{
public:
/* Constructor */
myclass();
/* Trigger fcn */
template<typename T> T Trigger(T rn);
private:
/* Specializations of the templated Trigger(...) function */
template<> int Trigger<int>(int rn);
template<> double Trigger<double>(double rn);
}
и:
//class.cpp
/* Specializations of the templated Trigger(...) function */
template<> int myclass::Trigger<int>(int rn)
{
int_do(rn);
}
template<> double myclass::Trigger<double>(double rn)
{
double_do(rn);
}
есть ли способ для этого?
Это выглядит странно, не является достаточно хорошей причиной ИМО. Нет никакого способа сделать это, что не связано с каким-либо компромиссом, поэтому я бы просто привык к этому. – john
Ваше определение шаблона должно оставаться в файле заголовка, но вы можете объявить функции, как у вас, вне определения класса {} (только в файле .h) – benjymous
Возможный дубликат [Как объявить шаблон функция за пределами декларации класса] (http://stackoverflow.com/questions/1047663/how-do-i-declare-template-function-outside-the-class-declaration) – benjymous