Определения шаблонов вне тела класса

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

13
задан doc 18 April 2012 в 14:15
поделиться