O.K. definire la funzione virtuale del modello di classe al di fuori del suo corpo? La funzione virtuale non può essere sottolineata, ma per evitare definizioni multiple in unità di compilazione, devono essere contrassegnate con inline
(presupponendo che le intestazioni di modello siano incluse in più file sorgente). D'altra parte il compilatore è libero di ignorare inline
, quindi questo sembra valido. Per un esempio, il seguente codice è corretto:Definizioni di modelli al di fuori del corpo della classe
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) consente di omettere inline
prima della definizione della funzione f(T val)
ma non prima della funzione analoga della classe regolare. È solo il comportamento di gcc?
Si utilizza gcc * 3.4.2 *? – jpalecek
@jpalecek in questo particolare esempio, sì. – doc
@doc - Le funzioni virtuali * possono * essere dichiarate 'inline' (ma non è necessario qui). Il compilatore ha solo un po 'più difficile capire esattamente quando le funzioni possono essere sottolineate. –