如果我在非模板类中有一个成员函数模板,并且想在类外定义它-我是否必须使用“内联”?
例:
class A
{
template <class D>
void someMethod(D param);
}
template <class D>
/* inline needed here? */ void A::someMethod(D param)
{
}
Run Code Online (Sandbox Code Playgroud)
该标准的第3.2.5节说功能模板不属于一个定义规则。成员功能模板在这方面是否是功能模板?
编辑:没有内联程序,链接器不会抱怨-但仍然-它是否有效的C ++ 03?
编辑:
到目前为止,我了解到的是:gcc(以及假设的其他编译器)也将隐式模板实例导出为弱符号,这意味着如果在多个转换单元中实例化它们,则链接时间内不会发生冲突。由于弱符号不是标准的一部分-标准是否以某种方式隐式要求模板实例化以这种方式运行,我是否可以期望其他符合标准的编译器/链接器组合具有相同的行为?
由于内嵌基本上忽略了优化,但是允许在不同的翻译单位功能的多个定义,这暗示转化为出口这些功能弱符号。这是否意味着将模板声明为内联是多余的?
无论成员函数模板是否是函数模板,它们肯定不是对象或非内联函数,因此“单一定义规则”不适用。
但它们实际上是函数模板,并且对于不特定于非成员函数模板的标准的其他应用程序来说也确实如此。
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |