Где бы вы поместили глобальные константы в приложение C++? Например, вы бы поместили их в класс? В структуре?Где вы должны помещать глобальные константы в программу на C++?
ответ
Я бы использовал пространство имен для глобальных констант, которые не очень сильно связаны с одним классом. В последнем случае я бы поставил их в этот класс.
Действительно Глобальные (прикладные) константы должны находиться в пространстве имен приложения (если ваше приложение находится внутри собственного пространства имен, как и должно быть). Для констант уровня модуля собственное пространство имен модулей является естественным местом.
Лучший подход - разместить их в одном и том же пространстве имен, где они принадлежат. Большое приложение на C++, как правило, имеет много модулей, каждый из которых имеет свой собственный набор констант. Каждый модуль должен находиться в пространстве имен с его константами в нем.
Один из вариантов помещает их в класс как нестатические элементы и помещает объект такого типа внутри вашей функции main(). Это упрощает создание не-глобальных переменных , когда вы узнаете, что вам нужно, по какой-либо причине.
Как простое эмпирическое правило, я помещаю их в любое место, в результате чего у них нет раздражающих префиксов стиля С.
Так, например, если ваши постоянные называются mylib_foo
, mylib_bar
, то они должны быть в пространстве имен MyLib и быть mylib::foo
и mylib::bar
.
Если пространство имен MyLib содержит константы circle_max_radius
, sphere_max_radius
, rectangle_max_width
, rectangle_max_height
, где круг, сфера и Прямоугольник классы, то они должны статические члены класса.
max
не является «раздражающим» префикс, это вполне разумно один, так как это описательный модификатор, а не притяжательное («макс радиус из круга»). Так что он может остаться.
Один из возможных способов - это класс со статическими функциями-членами, которые возвращают константы. Я использую это, когда мне нужны константы, которые больше, чем базовые типы или простые объекты.
class Constant
{
public:
static const ComplexObject& getComplexObject()
{
static ComplexObject constObj = createComplexObject();
return constObj;
}
private:
static ComplexObject createComplexObject()
{
ComplexObject obj;
obj.setValue(1);
return obj;
}
}
Для постоянных локальных в одном файле .cpp, лучший подход, чтобы объявить их в анонимном пространстве имен, как так:
namespace {
int const seconds_per_minute = 60;
int const minutes_per_hour = 60;
}
Для констант, которые должны быть видимыми для всей программы, самое простое решение - создать для них (именуемое) namspace и поместить его в файл заголовка.
Если есть (или могут быть) некоторые операции с ними, вместо этого вы должны, вероятно, создать для них singleton class. Например, довольно распространено, что мои программы имеют одноэлементный класс с именем «конфигурация», который считывает константы запуска (такие вещи, как IP-адреса и вещи, которые я не совсем хочу жестко-кодировать) из файла конфигурации или реестра или чего-то еще как это.
- 1. Где я должен помещать свои глобальные константы в библиотеку .NET?
- 2. Глобальные константы на Python
- 3. C++ Глобальные константы в проекте
- 4. Где хранить глобальные константы в приложении iOS?
- 5. Где указать глобальные константы домена (и как)?
- 6. Глобальные константы в Groovy
- 7. Javascript - Где разместить константы, глобальные или локальные?
- 8. Где определить глобальные константы в RubyMotion?
- 9. Где определить глобальные константы в ASP.NET MVC?
- 10. Objective C глобальные константы с case/switch
- 11. Общие, глобальные объекты - где они должны жить?
- 12. Где определить все мои константы/глобальные переменные?
- 13. Глобальные константы в PHPUnit
- 14. Глобальные константы против перечисления
- 15. Глобальные константы в приложении IOS
- 16. Где должны размещаться «глобальные» функции Symfony?
- 17. Глобальные константы в F # - как
- 18. В среде MVC, где мы должны помещать файлы NODE.js?
- 19. Возможны ли глобальные константы?
- 20. Где вы должны включить SSL?
- 21. глобальные константы без использования #define
- 22. Установить глобальные константы в AngularJs
- 23. Где хранить глобальные константы в приложении для Android?
- 24. Пользователь, определяющий предопределенные глобальные константы
- 25. где мы должны помещать переменную HIDDEN в JSP
- 26. Цель C - Где вы деляете глобальные статические переменные?
- 27. Что квалифицируется как глобальные константы в Python
- 28. Где вы должны поместить * при объявлении указателя в C?
- 29. Как использовать глобальные константы в методе Метеор?
- 30. Должны ли вы использовать глобальные классы в PHP
+1, но для констант уровня модуля, которые не должны быть видимыми для объявления класса, я использую монономическое namspace. –
@ T.E.D. Зависит от того, что ваш «модуль» - я думал о большей части, состоящей из нескольких классов. Если под «модулем» вы подразумеваете единую единицу компиляции, я полностью согласен с вами. –