为什么 C++ 模板只能在头文件中实现?
在 C++ 中实例化一个模板时,编译器新建一个类。此类具有 template argument 替换为在使用中传递给它的实际参数的所有位置。例如,-
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)实例化它们。如果这些模板类的实现不在头文件中,则它们将不可访问,并且因此无法编译。
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP