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