为什么 C++ 模板只能在头文件中实现?
例证说明当你在 C++ 中实例化一个模板时,编译器将创建一个新类。该类具有你放置模板参数的所有地方,代之以你在使用它时传入给它的实际参数。例如 -
template<typename T> class MyClass { T foo; T myMethod(T arg1, T arg2) { // Impl } };
然后在你的程序中某处使用该类,
MyClass<int> x;
编译器每在你传入此类型参数时会创建一个新类。例如,如果你使用不同的模板参数创建了 3 个对象,你会得到 3 个类,相当于以下内容 -
class MyClassInt { int foo; int myMethod(int arg1, int arg2) { // Impl } };
为了实现此目的,编译器在遇到此语句之前需要访问该类的实现和方法,才能使用模板参数(在此情况下为 int)对其进行实例化。如果这些模板类实现不在头文件中,它们将不可访问,因此不会编译。
广告