¿Hay alguna diferencia entre definir funciones de miembro para una clase de plantilla dentro de la declaración de clase frente a afuera?Diferencia entre las funciones de miembro para una clase de plantilla definida dentro y fuera de la clase
definida en el interior:
template <typename T>
class A
{
public:
void method()
{
//...
}
};
definida fuera:
template <typename T>
class B
{
public:
void method();
};
template <typename T>
void B<T>::method()
{
//...
}
Para las clases no de plantilla, esta es la diferencia entre los métodos inline y no inline. ¿Esto también es cierto para las clases de plantilla?
El valor predeterminado para la mayoría de mis colegas es proporcionar definiciones dentro de la clase, pero siempre he preferido las definiciones fuera de la clase. ¿Está justificada mi preferencia?
Editar: Asuma que todo el código anterior se proporciona en el archivo de encabezado de la clase.
Nunca he visto una referencia en ninguna parte que indique que la definición de un cuerpo de método dentro de la declaración de clase hace que ese método esté en línea. ¿Me he estado perdiendo algo? – Dathan
@Dathan: Vea aquí: http://www.parashift.com/c++faq-lite/inline-functions.html#faq-9.8 Y aquí: http: //msdn.microsoft.com/en-us /library/bw1hbe6y%28VS.80%29.aspx – Ben
@Dathan: Ha estado perdiendo §9.3/2 del estándar C++, que dice: "Una función miembro puede definirse (8.4) en su definición de clase, en la cual caso es una función miembro en línea ... "Editar: También tenga en cuenta que esta es una definición de clase - una declaración de clase es algo así como:' clase x; ' –