Всегда учитывая, что следующий заголовок, содержащий мой шаблонный класс, включен как минимум в два файла .CPP
, этот код правильно компилируется:
template <class T>
class TClass
{
public:
void doSomething(std::vector<T> * v);
};
template <class T>
void TClass<T>::doSomething(std::vector<T> * v) {
// Do somtehing with a vector of a generic T
}
template <>
inline void TClass<int>::doSomething(std::vector<int> * v) {
// Do somtehing with a vector of int's
}
Но обратите внимание на inline в методе специализации. Требуется, чтобы код не имел ошибки компоновщика (в VS2008 есть LNK2005) из-за того, что метод определен более одного раза. Я понимаю это, потому что AFAIK полная спецификация шаблона совпадает с простым определением метода.
Итак, как мне удалить этот inline
? Код не должен дублироваться при каждом его использовании. Я искал Google, читал некоторые вопросы здесь, в SO и пробовал многие из предлагаемых решений, но ни один из них не был успешно построен (по крайней мере, не в VS 2008).
Спасибо!