Tengo algunas funciones en línea contenidas dentro de un espacio de nombres en un archivo de encabezado y actualmente no estoy en posición de moverlas a un archivo cpp. Algunas de estas funciones en línea utilizar las constantes mágicas, por ejemplo:Ocultar constantes privadas en un encabezado de espacio de nombres en línea
// Foo.h
namespace Foo
{
const int BAR = 1234;
inline void someFunc()
{
// Do something with BAR
}
}
Sin embargo, quiero hacer estas constantes mágicas privada - alguna idea de cómo? Lo primero que pensé fue utilizar un espacio de nombres en el anonimato por lo tanto:
// Foo.h
namespace Foo
{
namespace
{
// 'private' constants here
const int BAR = 1234;
}
inline void someFunc()
{
// Do something with BAR
}
}
Sin embargo, esto no funciona y Foo::BAR
está disponible para cualquier archivo CPP que incluye Foo.h
? ¿Hay alguna manera de hacerlo sin crear un archivo cpp de implementación?
Este es también el uso de la convención impulso. Funciona bien siempre y cuando le digas a todo el mundo: "Nunca ingreses un espacio de nombres de detalles", que la mayoría no haría de todos modos. – GManNickG