J'ai un ensemble de fonctions qui fonctionnent sur un fichier. A l'origine je l'ai fait dans une classe, avec le seul membre privé étant un static const std::string
qui était le nom du fichier. L'utilisateur a utilisé ces fonctions en créant un objet et en lui appelant des fonctions. Cependant, je pense que je vais passer à l'utilisation d'un espace de noms, car c'est juste un ensemble de fonctions et cela a plus de sens. Le seul problème est que je voudrais toujours garder cette chaîne constante. Est-ce que faire quelque chose dans ce sens serait bien?Fin d'avoir des variables dans un espace de noms?
namespace FileHandler {
// Functions to do stuff with file
const std::string FILE_NAME;
}
Je dispose d'un fichier de mise en œuvre distincte pour l'espace de noms, mais je me demande si la perte d'encapsulation d'avoir le nom de fichier soit un membre privé dans une classe est intéressant d'utiliser l'espace de noms à la place.
Merci pour l'info. La raison pour laquelle je n'inclue pas la définition de la chaîne dans le fichier d'en-tête est qu'il n'est pas nécessaire que l'utilisateur sache, c'est pourquoi je le définis dans le fichier d'implémentation avec les fonctions dans l'espace de noms. – Anonymous
Dans ce cas, vous pouvez faire 'extern const std :: string blah;' dans le fichier d'en-tête et 'const std :: string ns :: blah =" quel que soit ";' dans le fichier source. –
Ai-je manqué quelque chose - pourquoi même déclarer ce nom de fichier dans l'en-tête, s'il était auparavant privé et que l'utilisateur n'a pas besoin de le savoir? Est-il utilisé dans un code en ligne dans l'en-tête, ou un paramètre de fonction par défaut, ou un tel? Sinon, déplacez-le entièrement dans le fichier d'implémentation. –