С/C++: libconfig - библиотека для обработки конфигурационных файлов

Потребовалось включить в программу удобочитаемый и легко редактируемый конфигурационный файл. После перебора нескольких библиотек решил остановиться на 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", то выскочит ексепшен

похожие страницы

  1. Автоматическая обработка файлов, часть два
  2. Стилизация фотографии, осваиваю новенькое
  3. Объединение русских манов
  4. cvs: добавление проекта
  5. Групповое переименование файлов в Linux

#1:

добавь обработку exception-ов. try ... catch
тогда программа сможет в лог вывести какие из опций ей не понравились, а не падать на пустом месте

ответить  2009-12-15 00:16:57 

#2:  Басманов:

разумеется, я просто обратил на это внимание

ответить  2009-12-15 00:17:42 

#3:

А КАК МАССИВ ИПОЛЬЗОВАТЬ? HАПРИМЕР МНЕ НАДО ДАТЬ ССЫЛКУ В ФУНКЦИИ BSEARCH.

ответить  2011-03-19 08:56:50