加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

g – C 0x标准中是否有任何内容可以支持单独的模板编译?

发布时间:2020-12-16 10:19:32 所属栏目:百科 来源:网络整理
导读:在当前的g中,我通常包括所有模板化函数,它们将模板参数作为参数,因为必须为每个实例编译它们. templatetypename Tclass A {public: void f() { ... }}; 所以在不同的来源中,我会写: #include A.hhAint a1;a1.f();Adouble a2;a2.f(); 有时,当我一直急于不内
在当前的g中,我通常包括所有模板化函数,它们将模板参数作为参数,因为必须为每个实例编译它们.

template<typename T>
class A {
public:
  void f() { ... }
};

所以在不同的来源中,我会写:

#include <A.hh>
A<int> a1;
a1.f();

A<double> a2;
a2.f();

有时,当我一直急于不内联大方法时,我已经手动指定了哪些类将在源文件中使用,但它确实令人讨厌:

template<typename T>
A::A() { ... }

template<typename T>
void A::f() { ... }

A<int>; // manually trigger code generation for int and double
A<double>;

显然,不同的IDE和编译器都有支持这一点的机制.是否有任何标准强制要求,和/或g是否支持这样的事情?

解决方法

建议的C 0x标准中没有任何内容.事实上,导出模板已被删除(很少有编译器实现它).

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读