为什么 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)对其进行实例化。如果这些模板类实现不在头文件中,它们将不可访问,因此不会编译。


更新于: 2020 年 2 月 11 日

781 浏览量

开启你的 职业生涯

完成课程获得认证

开始
广告