Ist es O.K. virtuelle Funktion der Klassenvorlage außerhalb ihres Körpers zu definieren? Die virtuelle Funktion kann nicht inline ausgeführt werden, aber um Mehrfachdefinitionen in Kompilierungseinheiten zu vermeiden, müssen sie als inline
markiert sein (vorausgesetzt, dass Vorlagenköpfe in mehreren Quellendateien enthalten sind). Auf der anderen Seite kann der Compiler inline
ignorieren, daher scheint dies gültig zu sein. An einem Beispiel ist der folgende Code korrekt:Vorlagedefinitionen außerhalb des Klassenkörpers
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) ermöglicht inline
vor der Definition der Funktion f(T val)
, aber nicht vor analoge Funktion der regulären Klasse zu unterlassen. Ist es nur das Verhalten von gcc?
Sie verwenden gcc * 3.4.2 *? – jpalecek
@jpalecek in diesem speziellen Beispiel ja. – doc
@doc - Virtuelle Funktionen * können * inline deklariert werden (aber das wird hier nicht benötigt). Der Compiler ist nur ein bisschen schwieriger herauszufinden, wann genau die Funktionen inline sein können. –