на главную обо мне контакты катра сайта
Блог Создание и продвижение сайтов
 

С/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", то выскочит ексепшен

текст недоступен

другие страницы раздела

комментарии (3)

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

Valid XHTML 1.0 Strict Читать в Яндекс.Ленте Вятка-на-Сети: Каталог ресурсов