Что касается размера и цели вашей программы (насколько я понимаю из вашего описания), это, вероятно, не имеет значения, но, поскольку она имеет образовательный контекст, я бы посоветовал: " сделать это правильно ».
В такой ситуации я бы использовал Config
структуру (или класс, если вы хотите сделать его немного умнее, см. Ниже), который содержит значения конфигурации и может быть отброшен вокруг вашей программы. Он имеет преимущество в том, что вы можете легко изменить его, если вам, скажем, нужно извлечь параметры из файла или из командной строки.
Что касается класса в сравнении со структурой (обратите внимание, что здесь я делаю логическое различие, а не техническое). Либо вы просто помещаете все значения в качестве членов в своей структуре и передаете их константные ссылки, либо вы делаете его полноценным классом со средствами доступа, которые скрывают, откуда поступают данные (и как они генерируются). Программирование - это всегда принятие решений, и это ваше решение. Если вы считаете, что в будущем вам потребуется больше возможностей для настройки (как упомянуто выше), вы можете перейти к абстракции класса.
Еще один вариант - разбросать ваши данные по вашей программе, что на самом деле намного умнее, чем кажется. Если каждый класс знает только свои параметры конфигурации (и скрывает их), вы можете использовать язык ООП, который вы используете. Пример:
// footype.h
class FooType {
private:
static const int fooOption;
};
// bartype.h
class BarType {
private:
static const float barOption;
};
Вопрос в том, как это инициализировать. Одним из способов может быть создание config.cpp
, которое выглядит следующим образом:
#include "footype.h"
#include "bartype.h"
const int FooType::fooOption = 42;
const float BarType::barOption = 7.4;
Таким образом, у вас есть скрытая информация, и у вас все еще есть все параметры конфигурации в одном месте (config.cpp
).
Edit:
Если у вас есть опция конфигурации, которая требуется для многих (более одного) различных модулей, вы можете пойти на небольшую изощренность (с косвенным указанием), например, так:
// footype.h
class FooType {
private:
static const int& fooOption;
static const bool& dumpLevel;
};
// bartype.h
class BarType {
private:
static const float& barOption;
static const bool& dumpLevel;
};
config.cpp:
#include "footype.h"
#include "bartype.h"
static const int opt_foo = 42;
static const float opt_bar = 7.4;
static const bool opt_dumpLevel = false;
const int& FooType::fooOption = opt_foo;
const bool& FooType::dumpLevel = opt_dumpLevel;
const float& BarType::barOption = opt_bar;
const bool& BarType::dumpLevel = opt_dumpLevel;
Вы можете даже сделать параметры неконстантными, если хотите (но я не вижу смысла в параметре конфигурации , который является изменяемым).