C++ 0x标准中有什么东西可以支持单独的模板编译吗?

Dov*_*Dov 3 g++ c++11

在当前的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 ++是否支持这样的事情?

Ben*_*igt 5

建议的C++ 0x标准中没有任何内容.事实上,export template已被删除(无论如何,很少有编译器实现它).

就内联而言,这是一个完全没有问题的问题.编译器非常聪明,即使它们被标记inline并放入头文件中,也不会内联过大的函数.

如果您正在查看从模板中增长的头文件增加的编译时间,请使用预编译头.这些不是标准的,但几乎所有当前的编译器都提供了这样的机制.