我的申请有一个普遍的问题。我想对我制作的 Array 类使用延迟初始化,以提高性能;当所有代码都在单个 *.h 文件中时,一切正常,但是当我将代码拆分为 *.h*.cpp 文件时,编译器会返回链接器错误。在头文件中我有一个
template <class T>
class simpleArray { ... some methods\operators declarations. ... }
和
template <typename T, typename derType=simpleArray<T>>
class myArray{.... some methods\operators declarations. ... }
我有明确的声明:
template class myArray<double>;
template class myArray<int>;
template class simpleArray<double>;
template class simpleArray<int>;
在 *.cpp 文件中,我实现了方法和运算符。特别是我有两个赋值运算符:
template <class T, class derType>
myArray<T,derType>& myArray<T,derType>::operator= (myArray<T,derType> const& right)
{... some code ...}
template<class T, class derType>
template <class T2, class R2>
myArray<T,derType>& myArray<T,derType>::operator= (myArray<T2,R2> const& right)
{ ... some code ...}
第一个工作正常,第二个(Arra=Array)返回以下错误:
Error 70 error LNK1120: 1 unresolved externals
Error 69 error LNK2019: unresolved external symbol "public: class myArray <double,class simpleArray<double> > & __thiscall myArray <double,class simpleArray<double> >::operator=<int,class simpleArray<int> >(class myArray <int,class simpleArray<int> > const &)"
您能否提出一些解决方案?我必须在同一个文件中包含所有代码吗?我希望已经清楚了。谢谢你的支持!
附言。使用模板时是否有一些关于代码组织的“最佳实践”文档?