Cacher privé constantes dans une ligne de l'espace de noms d'en-tête
J'ai quelques fonctions inline contenues dans un espace de noms dans un fichier d'en-tête et je ne suis pas actuellement en mesure de les déplacer dans un fichier cpp. Certaines de ces fonctions inline utiliser la magie des constantes, par exemple:
//Foo.h
namespace Foo
{
const int BAR = 1234;
inline void someFunc()
{
//Do something with BAR
}
}
Cependant, je veux faire de ces constantes magiques privé - toutes les idées comment? Ma première pensée a été d'utiliser un espace de noms anonymes ainsi:
//Foo.h
namespace Foo
{
namespace
{
//'private' constants here
const int BAR = 1234;
}
inline void someFunc()
{
//Do something with BAR
}
}
Toutefois, cela ne fonctionne pas et Foo::BAR
est à la disposition de tout fichier cpp qui comprend Foo.h
? Est-il un moyen de le faire sans créer de mise en œuvre de fichier cpp?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas, anonyme espaces de noms de travailler pour l'unité de traduction qu'ils sont définis dans (ou inclus dans votre cas).
Vous pourriez envisager de les déplacer dans un
detail
espace de noms pour signaler à l'utilisateur qu'ils sont des détails internes:Comment sur:
Cela rend la constante nonaccessible personne d'autre que les fonctions que vous marque comme des amis. Vous pouvez faire la classe nonconstructable en rendant le constructeur privé pour s'assurer que personne ne tente d'instancier la classe.
Les mettre dans un espace de noms particulier ou un nom spécialement, combiné avec un projet de convention que de telles choses sont non-public:
Toute personne utilisant les noms de documentés en tant que non-public contourner toute mesure de "protection" vous essayez de; qui met en lumière la véritable préoccupation: la documentation de ce que la partie de l'interface publique et ne peut être invoqué.
Sans nom les espaces de noms de résoudre un autre problème: nom unique à un TU. Ils ne seront pas vous aider ici.