Chu*_*uim 84 c++ templates specialization visual-studio-2008
始终考虑包含我的模板类的以下标头至少包含在两个.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中没有).
谢谢!
max*_*000 67
与简单函数一样,您可以使用声明和实现.放入标题声明:
template <>
void TClass<int>::doSomething(std::vector<int> * v);
Run Code Online (Sandbox Code Playgroud)
并将实现放入您的一个cpp文件中:
template <>
void TClass<int>::doSomething(std::vector<int> * v) {
// Do somtehing with a vector of int's
}
Run Code Online (Sandbox Code Playgroud)
不要忘记删除内联(我忘了,并认为这个解决方案将无法工作:)).检查VC++ 2005
归档时间: |
|
查看次数: |
52830 次 |
最近记录: |