2012-02-12 3 views
12

Я ищу кросс-платформенную библиотеку конфигурации C++ с неограниченной лицензией. Мне нужно что-то более сложное, чем стандартный файл свойств с разделами, но я не хочу использовать XML (слишком много написания :-)).C++ легкая конфигурация библиотеки

Я хотел бы написать конфигурацию таким образом:

render = 
{ 
    window = 
    { 
     width = 800, 
     height = 600 
    } 
} 
+1

Я нашел [libconfig] (http://www.hyperrealm.com/libconfig/). Я хорошо смотрю, но он использует исключения для сообщений об ошибках ... – runnydead

+1

Я также считаю, что libconfig довольно приятный. Есть несколько проблем, которые у меня есть с C++ API, и, похоже, для Java не существует реализации (это означает, что только приложения C/C++ могут читать конфигурационные файлы), но на данный момент она по-прежнему остается моей конфигурационной библиотекой , –

ответ

13

Там в подталкивание-х property_tree. license позволяет использовать его в коммерческих целях.

Ваш пример:

ptree pt; 
pt.put("render.window.width", 800); 
pt.put("render.window.height", 600); 

Это может, например, экспортировать в формат JSON

write_json("my_config.json", pt); 

, который будет выглядеть, как

{ 
    "render": 
    { 
    "window": 
    { 
     "width": 800; 
     "height": 600; 
    } 
    } 
} 

Таким же образом вы можете экспортировать в XML, INI и INFO.

+0

По моему опыту .. Boost - это далеко не легкая библиотека, но я буду смотреть на нее, потому что выглядит многообещающе. – runnydead

+4

@hubrobin: вам не нужна вся библиотека Boost для выполнения этой работы, IIRC. У Boost есть инструмент под названием [bcp] (http://www.boost.org/doc/libs/release/tools/bcp/doc/html/index.html), разработанный специально для извлечения отдельных библиотек. –

2

Вы также можете попробовать JsonCpp и записывать файлы конфигурации в Json, который имеет очень похожий синтаксис, который Вы любите:

// Configuration options 
{ 
    // Default encoding for text 
    "encoding" : "UTF-8", 

    // Plug-ins loaded at start-up 
    "plug-ins" : [ 
     "python", 
     "c++", 
     "ruby" 
     ], 

    // Tab indent size 
    "indent" : { "length" : 3, "use_space": true } 
} 

находится под MIT License поэтому очень разрешительный.

Смежные вопросы