¿Es O.K.? para definir la función virtual de la plantilla de clase fuera de su cuerpo? La función virtual no puede estar en línea, pero para evitar definiciones múltiples en unidades de compilación, se marcarán como inline
(suponiendo que los encabezados de las plantillas se incluirán en varios archivos de origen). Por otro lado, el compilador puede ignorar inline
, por lo que parece válido. Por un ejemplo, es el siguiente código correcto:Definiciones de plantilla fuera del cuerpo de clase
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) permite omitir inline
antes de la definición de la función f(T val)
pero no antes de la función análoga de la clase normal. ¿Es solo el comportamiento de gcc?
Utiliza gcc * 3.4.2 *? – jpalecek
@jpalecek en este ejemplo particular, sí. – doc
@doc - Las funciones virtuales * pueden * declararse 'en línea' (pero eso no es necesario aquí). El compilador simplemente tiene un poco más difícil de averiguar exactamente cuándo las funciones pueden estar en línea. –