2012-02-12 14 views
12

Estoy buscando una biblioteca multiplataforma de configuración ligera C++ con licencia no restrictiva. Necesito algo más complejo que el archivo de propiedades estándar con secciones, pero no quiero usar XML (demasiada escritura :-)).C++ biblioteca de configuración liviana

me gustaría escribir la configuración de esta manera:

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

He encontrado [libconfig] (http://www.hyperrealm.com/libconfig/). Me veo bien, pero usa excepciones para informes de errores ... – runnydead

+1

También creo que libconfig es bastante agradable. Hay algunos problemas que tengo con la API de C++ y no parece haber una implementación para Java (lo que significa que solo las aplicaciones de C/C++ pueden leer los archivos de configuración), pero por ahora sigue siendo mi biblioteca de configuración de acceso. . –

Respuesta

13

Hay impulso de property_tree. El license permite el uso comercial.

Su ejemplo:

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

Esto por ejemplo puede exportarse a JSON

write_json("my_config.json", pt); 

que entonces contendrá como

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

De la misma manera se puede exportar a XML, INI y INFO.

+0

En mi experiencia .. Boost está lejos de ser una biblioteca liviana, pero lo veré, porque parece prometedor – runnydead

+4

@hubrobin: No necesita toda la biblioteca de Boost para que esto funcione, IIRC. Boost tiene una herramienta llamada [bcp] (http://www.boost.org/doc/libs/release/tools/bcp/doc/html/index.html) diseñada específicamente para extraer bibliotecas individuales. –

2

También puede intentar JsonCpp y escribir archivos de configuración en Json, que tiene una sintaxis muy similar a la que más le guste:

// 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 } 
} 

está bajo el MIT License así que es muy permisiva.