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标准中没有任何内容.事实上,导出模板已被删除(很少有编译器实现它).
就内联而言,这是一个完全没有问题的问题.编译器非常聪明,即使它们被标记为内联并放入头文件,也不会内联过大的函数. 如果您正在查看从模板中膨胀的头文件增加的编译时间,请使用预编译的头文件.这些不是标准的,但几乎所有当前的编译器都提供了这样的机制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |