【发布时间】:2012-04-29 23:25:00
【问题描述】:
可以吗?在其主体之外定义类模板的虚函数?虚函数不能内联,但为避免在编译单元中有多个定义,应将它们标记为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) 允许在定义函数f(T val) 之前省略inline,但不能在普通类的类似函数之前省略。只是gcc的行为吗?
【问题讨论】:
-
@jpalecek 在这个特定的例子中,是的。
-
@doc - 虚函数可以声明为
inline(但这里不需要)。编译器只是很难确定函数何时可以内联。
标签: c++ templates virtual inline