跳到主要内容

简述为什么模板类一般都是放在一个 h 文件中 ?

参考答案:

将模板类放在头文件中(通常是通过.h.hpp文件)主要是为了解决模板实例化的问题。在C++中,模板不是常规函数或类,而是生成函数或类的蓝图。当编译器遇到模板的某个特定实例(即,用特定类型参数化的模板)时,它会为那个特定类型生成相应的函数或类。这个过程称为模板实例化。

如果模板定义在.cpp文件中,那么每次在.h文件中包含这个模板的.cpp文件时,都需要在编译时重新实例化模板。这会导致多重定义错误,因为每个编译单元(即每个.cpp文件)都会尝试实例化相同的模板。

另一方面,如果模板定义在头文件中,那么每次在.cpp文件中包含这个头文件时,模板的定义都会被包含进来。但重要的是,模板的实例化(即用特定类型替换模板参数的过程)是在使用这个模板的.cpp文件中进行的。因此,尽管模板的定义被多次包含,但模板的实例化只会在需要的地方发生一次。这就是所谓的“包含模板定义”或“模板实例化”的“一次定义规则”(ODR)。

所以,为了避免多重定义错误,并确保模板实例化的正确性,我们通常将模板类放在头文件中。