Supongamos que tengo dos funciones de plantilla declaradas en un archivo de cabecera:¿Cómo ocultar una plantilla de ayuda de implementación?
template <typename T> void func1(const T& value);
template <typename T> void func2(const T& value);
Y supongamos que la aplicación de estas funciones (también en un fichero de cabecera y no en un archivo de origen, ya que son las plantillas) utiliza algún función de asistente de aplicación, que es también una plantilla:
template <typename T> void helper(const T& value) {
// ...
}
template <typename T> void func1(const T& value) {
// ...
helper(value);
}
template <typename T> void func2(const T& value) {
// ...
helper(value);
}
En cualquier archivo de origen que incluyo el archivo de cabecera, la función auxiliar será visible. No quiero eso, porque la función auxiliar es solo un detalle de implementación. ¿Hay alguna manera de ocultar la función de ayuda?
¿Qué quieres decir con que es visible? como tu puedes llamarlo? – atoMerz
@AtoMerZ Sí, puedes llamarlo; el nombre 'helper' se definirá en cualquier archivo de origen donde incluya el archivo de encabezado. Debe estar oculto, de modo que solo 'func1' y' func2' sepan que existe, y el resto del programa no. – Jesper
@Jsper, recomendaría el enfoque de John Dibling. – atoMerz