始终考虑包含我的模板类的以下标头至少包含在两个.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
}
Run Code Online (Sandbox Code Playgroud)
但请注意专业化方法中的内联.由于该方法被定义多次,因此需要避免链接器错误(在VS2008中为LNK2005).我理解这一点,因为AFAIK完整的模板专业化与简单的方法定义相同.
那么,我该如何删除inline?代码不应该在每次使用时都重复.我搜索了Google,在SO中阅读了一些问题并尝试了许多建议的解决方案但没有成功构建(至少在VS 2008中没有).
谢谢!
在C++中,如果要部分地专门化模板类中的单个方法,则必须专门化整个类(例如,在模板专门化中使用带有多个模板参数的模板化类的单个方法中所述)
然而,当具有多个模板参数的较大模板类中,当它们中的每一个影响单个函数时,这变得令人厌烦.使用N个参数,您需要专门化2 ^ N次!
但是,使用C++ 11我认为可能有一个更优雅的解决方案,但我不知道如何处理它.也许不知怎的enable_if?有任何想法吗?