如果我在非模板类中有一个成员函数模板,而且想要在类外定义它 - 我是否必须使用 "inline" ?
例子:
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(和其他编译器)将隐式模板实例导出为弱符号,这意味着如果它们在多个翻译单元中被实例化,则链接时不会发生冲突。由于弱符号并非标准的一部分 - 标准是否以某种方式隐含要求模板实例以此方式行事,并且我可以期望其他符合标准的编译器/链接器组合具有相同的行为吗?
由于内联基本上被优化忽略,但允许在不同的翻译单元中多次定义函数,因此这隐含地将这些函数导出为弱符号。这是否意味着将模板声明为内联是多余的?