c++ templates implementation private

c++ - funciones de plantilla privada



templates implementation (2)

A menos que su plantilla de función miembro privada sea utilizada por funciones miembro definidas en línea dentro de la definición de clase, no veo nada malo con este enfoque. Por el contrario, creo que cuantas menos dependencias se introduzcan en los archivos de encabezado, mejor.

Esto funcionará siempre que haga cumplir la convención de proporcionar siempre la implementación de cada clase en un único archivo fuente.

Tengo una clase:

Ch

class C { private: template<int i> void Func(); // a lot of other functions };

C.cpp

// a lot of other functions template<int i> void C::Func() { // the implementation } // a lot of other functions

Sé que no es la mejor idea mover la implementación de la plantilla en un archivo cpp (porque no se verá desde otros cpp, lo que podría incluir el encabezado con la declaración de la plantilla).

Pero ¿qué pasa con las funciones privadas? ¿Alguien podría decirme si existen inconvenientes para implementar funciones de plantillas privadas en un archivo .cpp?


Cuando una plantilla de función se usa de una manera que activa su creación de instancias, un compilador (en algún momento) necesita ver la definición de esa plantilla. Y esa es la razón, las plantillas generalmente se implementan dentro de un archivo de encabezado utilizando las terminaciones en línea.

Por lo tanto, siempre y cuando se sigan las reglas anteriores, aún está bien tener la interfaz y la implementación separadas en los archivos de encabezado y fuente.

Referencia:
Norma C ++ 03, § 14.7.2.4:

La definición de una plantilla de función no exportada, una plantilla de función miembro no exportada, una función miembro no exportada o un miembro de datos estáticos de una plantilla de clase estará presente en cada unidad de traducción en la que se haya creado una instancia explícita.