use*_*020 24 c++ template-function
inline
如果它们包含在多个cpp
文件中,我是否需要模板功能?谢谢.
template<bool> inline QString GetText();
template<> inline QString GetText<true>() {return "true";}
template<> inline QString GetText<false>() {return "false";}
Run Code Online (Sandbox Code Playgroud)
Meh*_*dad 25
你这样做,因为它们是全功能专业化,因此就像普通函数一样遵循单一定义规则.
jog*_*pan 19
是的,你需要inline
那里的说明符.
ODR(单定义规则)规定必须只有一个变量,函数,类,枚举或模板的定义.与您的问题相关的例外情况列于§3.2/ 5(C++ 11)(强调我的):
类类型(第9条),枚举类型(7.2),带内部链接的内联函数(7.1.2),类模板(第14条),非静态函数模板(14.5.6)可以有多个定义,类模板的静态数据成员(14.5.1.3),类模板的成员函数(14.5.1.1),或者在程序中未指定某些模板参数(14.7,14.5.5)的模板特化,前提是每个模板定义出现在不同的翻译单元中,并且定义满足以下要求.[...]
那里没有列出指定所有参数的模板特化(即显式特化),§14.7.3/ 12说:
只有在使用内联说明符声明或定义为已删除时,函数模板的显式特化才是内联的,而与其函数模板是否为内联无关.[例如:
Run Code Online (Sandbox Code Playgroud)template<class T> void f(T) { /? ... ?/ } template<class T> inline T g(T) { /? ... ?/ } template<> inline void f<>(int) { /? ... ?/ } // OK: inline template<> int g<>(int) { /? ... ?/ } // OK: not inline
- 结束例子]
归档时间: |
|
查看次数: |
24462 次 |
最近记录: |