类模板的虚函数可以在它的主体之外定义吗?虚函数不能内联,但为了避免编译单元中的多个定义,它们应该被标记inline
(假设模板头将包含在多个源文件中)。另一方面,编译器可以随意忽略inline
,所以这似乎是有效的。举个例子,下面的代码是否正确:
template <typename T>
class C
{
public:
virtual void f(T val);
};
template <typename T>
inline
void C<T>::f(T val)
{
//definition
}
?
BTW gcc(3.4.2)允许inline
在函数定义之前省略,f(T val)
但不能在常规类的类似函数之前省略。它只是gcc的行为吗?