Где хранить именованные константы класса в C++
Если у вас есть класс, который имеет несколько именованных констант, как лучше всего хранить константы:
Вариант 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 ответа
Если строки предназначены для просмотра / использования пользователями класса, вы не захотите их делать private
ученики Таким образом, я заключаю, что они не предназначены для просмотра / использования пользователями класса. Но тогда вообще не имеет смысла помещать их в заголовок.
Если вы поместите их в класс (или в область пространства имен в заголовке), то все изменения их типа и идентификатора заставят клиентов перекомпилировать свой код.
Если вы помещаете их в файл реализации класса, они являются частной деталью реализации класса, и изменения в них только вызывают принудительную перекомпиляцию реализации класса.
Если вы поместите их в безымянное пространство имен, они не смогут столкнуться с любым другим именем:
namespace {
namespace NamedConstants
{
const string Bucket = "Bucket";
}
}
Вариант 1 может привести к отдельному строковому объекту для каждого файла, который включает заголовок. Так что, среди прочего, это зависит от того, насколько скудны ваши ресурсы.