Czy to O.K. zdefiniować wirtualną funkcję szablonu klasy poza jego treścią? Funkcja wirtualna nie może być wstawiona, ale aby uniknąć wielu definicji w jednostkach kompilacji, należy oznaczyć je jako inline
(zakładając, że nagłówki szablonów będą zawarte w wielu plikach źródłowych). Z drugiej strony kompilator może ignorować inline
, więc wydaje się, że jest to poprawne. Na przykład poniższy kod jest poprawny:Definicje szablonów poza treścią klasy
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) pozwala na pominięcie inline
przed definicją funkcji f(T val)
, ale nie przed analogiczną funkcją zwykłej klasy. Czy to tylko zachowanie gcc?
Używasz gcc * 3.4.2 *? – jpalecek
@jpalecek w tym konkretnym przykładzie, tak. – doc
@doc - Funkcje wirtualne * może * być zadeklarowane jako 'inline' (ale to nie jest tutaj potrzebne). Kompilator ma nieco trudniejsze zadanie, aby dokładnie określić, kiedy funkcje mogą być wbudowane. –