Где хранить именованные константы класса в C ++ - PullRequest
2 голосов
/ 21 июля 2010

Если у вас есть класс, который имеет несколько именованных констант, как лучше всего хранить константы:

Вариант 1: пространство имен в заголовке класса

Так что в заголовке моего класса я буду иметь:

class myClass
{
...
...
};

namespace NamedConstants
{
   const string Bucket = "Bucket";
}

Варианты 2 константы

class MyClass {      // this goes in the class
private:                          // header file
  static const string Bucket;
  ...
};

... и в файле реализации класса:

const string MyClass::Bucket = "Bucket";

Я на самом деле предпочитаю вариант 1, считая его более чистым: имя и значение переменной отображаются вместе. Кроме того, если вы дадите пространству имен хорошее имя, это может сделать код более читабельным при использовании констант:

TrafficLight::Green

Кто-нибудь видит какие-либо проблемы с этим методом по сравнению с вариантом 2?

Ответы [ 2 ]

3 голосов
/ 21 июля 2010

Если строки предназначены для просмотра / использования пользователями класса, вы не станете делать их private членами класса. Таким образом, я заключаю, что они не предназначены для просмотра / использования пользователями класса. Но тогда вообще не имеет смысла помещать их в заголовок.

Если вы поместите их в класс (или в область имен в заголовке), то все изменения их типа и идентификатора заставят клиентов перекомпилировать их код.

Если вы поместите их в файл реализации класса , они являются частной деталью реализации класса ', и изменения в них вызывают принудительную перекомпиляцию реализации класса'.
Если вы поместите их в безымянное пространство имен , они не смогут столкнуться с любым другим именем:

namespace  {
  namespace NamedConstants
  {
     const string Bucket = "Bucket";
  }
}
1 голос
/ 21 июля 2010

Опция 1 может привести к созданию отдельного строкового объекта для каждого файла, который включает заголовок. Таким образом, все зависит от того, насколько скудны ваши ресурсы.

...