Это O.K. определить виртуальную функцию шаблона класса вне ее тела? Виртуальная функция не может быть встроена, но чтобы избежать множественных определений в единицах компиляции, они должны быть отмечены 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-поведение?