最佳答案
总是考虑到下面的头部(包含我的模板类)包含在至少两个 .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 something with a vector of a generic T
}
template <>
inline void TClass<int>::doSomething(std::vector<int> * v) {
// Do something with a vector of int's
}
但请注意专门化方法中的内联。它需要避免一个连接器错误(在 VS2008是 LNK2005) ,由于方法被定义多次。我理解这一点是因为 AFAIK 一个完整的模板专门化与一个简单的方法定义是相同的。
那么,我如何移除 inline
呢?代码不应该在每次使用时都被复制。我搜索了 Google,在 SO 中阅读了一些问题,并尝试了许多建议的解决方案,但没有一个成功构建(至少在 VS 2008中没有)。
谢谢!