根据我的理解,必须在同一个头文件中声明和定义模板类和模板函数(大多数情况下)。随着说:
除了使用特定编译器之外,还有其他方法可以实现模板文件的单独编译吗?如果是,那是什么?
在同一档案中使用声明和定义有什么缺点?
在模板声明和模板声明方面,什么是最佳实践?定义?
答案 0 :(得分:11)
How To Organize Template Source Code
基本上,您有以下选择:
答案 1 :(得分:1)
在.h文件中实现模板时遇到的一个缺点是,只要对实现进行少量更改,就必须重新编译使用该模板的所有代码。除了不使用模板或声明& amp;之外,真的没办法解决这个问题。在您使用它们的CPP文件中定义它们。
您可以在单独的文件中实现模板,然后从.h文件中包含该文件。如:
template<class V> V foo(const V& rhs);
#include "templ.inc"
template<class V> V foo*const V& rhs)
{
// do something...
return val;
}
我个人的偏好是在h文件中实现模板,除非它们变大,然后我将其分解为h和inc文件。
答案 2 :(得分:0)
答案 3 :(得分:0)
不是真的。模板的定义必须在编译时可用,因为模板是根据您提供的模板参数实例化的。这就是为什么它们必须放在头文件中,因此编译器可以使用代码来编写新的实例化。您几乎需要一个支持export关键字的编译器。
如果您的代码存在缺陷,人们可以看到您的代码。某些人也可能不那么“整洁”,但我认为这不是问题。
答案 4 :(得分:0)
另一个问题是每次更改.h时的编译时间(特别是如果它包含在很多地方)