Потребовалось включить в программу удобочитаемый и легко редактируемый конфигурационный файл. После перебора нескольких библиотек решил остановиться на libconfig. Вроде отличная библиотека, к тому же её легче всего удалось адптировать. Для установки нужно (мне нужен был биндинг для C++)
sudo aptitude install libconfig++-dev libconfig8-dev
Затем подключаем в проект вот так:
#include < libconfig.h++ >
libconfig::Config conf;
А использовать ещё проще
// загружаю конфиг, в случае ошибки ловим исключение с описание ошибки
try{
conf.readFile("config.conf");
}
catch(libconfig::ParseException e){
std::cout << e.getError() << " line:" << e.getLine() << std::endl;
}
// получаю значения различных типов
bool fullscreen = conf.lookup("application.screen.fullscreen");
string fontname = conf.lookup("application.fontname");
...
// используя скрытое преобразование типов передаю параметры в функцию
SDL_SetVideoMode(conf.lookup("application.screen.size.w") ,conf.lookup("application.screen.size.h") ,bpp,flags);
...
// меняю значений переменных и сохраняю
conf.lookup("application.screen.fullscreen")= (fullscreen?false:true);
conf.writeFile("config.conf");
В конфигах можно использовать довольно сложные стурктуры:
application :
{
version = "0.51";
name = "app";
screen :
{
size :
{
w = 1280;
h = 1024;
};
fullscreen = false;
shadows = "1";
detaillevel = "1";
};
keys :
{
up_key = 273;
down_key = 274;
left_key = 276;
right_key = 275;
fire_key = 32;
pause_key = 27;
};
fontname = "fonts/verdana.ttf";
level = "3";
map = "original.map";
sound = true;
};
Вроде очень простой и удобный класс, только необходимо помнить о приведении типа, например если вы ждёте в программе bool, а в конфиге используется "true" или "false", то выскочит ексепшен