在当前的g ++中,我通常包含所有模板化函数,它们将模板参数作为参数,因为必须为每个实例编译它们.
template<typename T>
class A {
public:
void f() { ... }
};
Run Code Online (Sandbox Code Playgroud)
所以在不同的来源中,我会写:
#include <A.hh>
A<int> a1;
a1.f();
A<double> a2;
a2.f();
Run Code Online (Sandbox Code Playgroud)
有时,当我一直急于不内联大方法时,我已经手动指定了哪些类将在源文件中使用,但它确实令人讨厌:
template<typename T>
A::A() { ... }
template<typename T>
void A::f() { ... }
A<int>; // manually trigger code generation for int and double
A<double>;
Run Code Online (Sandbox Code Playgroud)
显然,不同的IDE和编译器都有支持这一点的机制.是否有任何标准强制要求,和/或g ++是否支持这样的事情?
建议的C++ 0x标准中没有任何内容.事实上,export template已被删除(无论如何,很少有编译器实现它).
就内联而言,这是一个完全没有问题的问题.编译器非常聪明,即使它们被标记inline并放入头文件中,也不会内联过大的函数.
如果您正在查看从模板中增长的头文件增加的编译时间,请使用预编译头.这些不是标准的,但几乎所有当前的编译器都提供了这样的机制.
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |