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?

¿Fue útil?

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top