如果我在非模板类中有一个成员函数模板并且想在类之外定义它 - 我必须使用“内联”吗?
例子:
class A
{
template <class D>
void someMethod(D param);
}
template <class D>
/* inline needed here? */ void A::someMethod(D param)
{
}
该标准的第 3.2.5 节说功能模板不属于单一定义规则。在这方面,成员函数模板是函数模板吗?
编辑:链接器不会抱怨没有内联 - 但仍然 - 它是有效的 C++03 吗?
编辑:
到目前为止我所学到的:gcc(以及假设其他编译器)将隐式模板实例导出为弱符号,这意味着如果它们在多个翻译单元中实例化,则在链接时不会发生冲突。由于弱符号不是标准的一部分 - 标准是否以某种方式隐含地要求模板实例以这种方式运行,我是否可以期望与其他符合标准的编译器/链接器组合具有相同的行为?
由于inline基本上被忽略以进行优化,但允许在不同的翻译单元中定义多个函数,这隐含地转换为将这些函数导出为弱符号。这是否意味着将模板声明为内联是多余的?