2012-02-12 12 views
12

Sto cercando una libreria di configurazione lighweight C++ multipiattaforma con licenza non restrittiva. Ho bisogno di qualcosa di più complesso del file di proprietà standard con sezioni, ma non voglio usare XML (troppa scrittura :-)).Libreria di configurazione leggera C++

vorrei scrivere di configurazione in questo modo:

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

Ho trovato [libconfig] (http://www.hyperrealm.com/libconfig/). Ho un bell'aspetto, ma usa eccezioni per la segnalazione degli errori ... – runnydead

+1

Penso anche che libconfig sia piuttosto carino. Ci sono alcuni problemi che ho con l'API C++ e non sembra essere un'implementazione per Java (il che significa che solo le applicazioni C/C++ possono leggere i file di configurazione), ma per ora è ancora la mia libreria di go-go . –

risposta

13

C'è spinta di property_tree. Il license consente l'uso commerciale.

Il vostro esempio:

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

Questo esempio può essere esportati in JSON

write_json("my_config.json", pt); 

che sarà quindi simile a

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

Allo stesso modo è possibile esportare in XML, INI e INFO.

+0

Nella mia esperienza .. Boost è lontano dalla libreria leggera, ma lo guarderò, perché sembra promettente – runnydead

+4

@hubrobin: Non è necessario l'intera libreria Boost per farlo funzionare, IIRC. Boost ha uno strumento chiamato [bcp] (http://www.boost.org/doc/libs/release/tools/bcp/doc/html/index.html) progettato specificamente per estrarre singole librerie. –

2

Si può anche provare JsonCpp e scrivere i file di configurazione in Json, che ha una sintassi molto simile a quello che ti piace:

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

è sotto l'MIT License quindi è molto permissiva.

Problemi correlati