先看一下这条命令:
g++ useTArray.cpp TArray.cpp -g -o useTA
实现是,编译useTArray.cpp, 发现
TArray<int> arr1(8);
TArray<double> arr2;
所以需要替换,但是此时编译器认为在其他地方已经展开了,所以就要等到ld的时候做。
同时,TArray.cpp ,没有说明一定要展开int, double阿?
所以在ld的时候就会发现没有定义。
事实上,有两种方法可以实现,一个是包含include模式,就是楼上地说的放在.hxx里面。
但是这样可能造成代码的膨胀。
另外一种是重新写一个文件instantiation.cxx,然后进行特化
#include TArray.hxx
template<>
class TArray<int>{};
class TArray<double>{};
g++ useTArray.cpp TArray.cpp instantiation.cxx -g -o useTA
当然这样还是有问题,特别是项目很大的时候,会出现重复instantiation。
一般采用include 模型.
建议你看看C++ template