Необходимость возникла при хранении глобальных переменных в приложении, которые считываются из конфигурационного файла. Есть желание хранить их в словаре/хэш-таблице. Что-то вроде этого:
enum {SERVER, LOGIN, PASSWORD}
QString server = vars.value(SERVER);
QString login = vars.value(LOGIN);
QString password = vars.value(PASSWORD);
Вроде бы обычного enum должно хватить. Однако, подводные камни всегда есть. Чтобы уменьшить количество однообразного кода, хочется записывать и читать переменные так:
settings.setValue(PASSWORD, vars.value(PASSWORD));
vars.insert(PASSWORD, settings.value(PASSWORD, "").toString());
И в таком случае в конфигурационном файле будет нечитаемая каша.
Как варианты - конвертировать enums в строку, но это делается просто таки монструозными конструкциями, или составлять ещё один словарь enum<->строка, но это же глупо и по-индусски!
Вариант с использованием QSettings в GUI не подходит, так как вся логика вынесена в core, и core содержит интерфейсы для GUI, который может быть разнообразным, и, соответственно, про QSettings ничего не знать. Пока лучшим вариантом обмена переменными между core и GUI - опять же словарь. Не писать же в core::getSetting(QMap<key, value>)так:
if(map.contains("db_host"))
DB_HOST = map.value("db_host");
if(map.contains("db_user"))
DB_USER = map.value("db_user");
if(map.contains("db_password"))
DB_PASSWORD = map.value("db_password");
Суть вопроса - как наиболее изящно организовать хранение глобальных переменных?
Поделитесь рецептами и идеями.