fuente cruz plantilla de archivos de instancias y el uso
-
26-09-2019 - |
Pregunta
Tengo una clase con varias funciones miembro de plantilla que me gustaría distribuir entre varios archivos de origen para acelerar los tiempos de compilación. (Las plantillas son detalles de implementación y no están destinados a ser utilizados fuera de la clase, por lo tanto, su definición en fuentes no headers).
¿Cómo hago para dividir estas plantillas en tal manera que no voy a conseguir errores de enlace? Si tengo un archivo de origen utilizando una plantilla definida en el archivo de origen B, ¿cómo puedo hacer que la instancia apropiada de la plantilla se construye por el compilador?
Solución
Yo no podía responder mejor que C ++ FAQ:
https://isocpp.org/wiki/faq/templates#templates- defn-vs-decl
Otros consejos
Simplemente no declarar esos artículos de la plantilla como parte de la clase en el archivo de cabecera. A continuación, definir las plantillas sólo en el archivo de origen. Por ejemplo:
MyClass.hpp
class MyClass
{
public:
void SomePublicMethod() const;
};
MyClass.cpp
template<class T>
void SomethingWithT(T myVal)
{
// ...
}
void MyClass::SomePublicMethod() const
{
SomethingWithT(42);
}