Domanda

C'è un modo per caricare un file INI dinamica come quella qui sotto.

[basic]
number_of_servers=3

[server1]
ip=10.20.30.40
password=sdfslkhf    

[server2]
ip=10.20.30.41
password=sdfslkhf

[server3]
ip=10.20.30.42
password=sdfslkhf

Qui l'idea è che i server che sono definite qui è molto specifico per la distribuzione del software; così l'amministratore decide quanti server partecipare alla configurazione.

C'è un modo per gestire questa situazione in program_options Boost?

È stato utile?

Soluzione

Un altro modo potenzialmente più standard, sarebbe come questo:

[basic]
number_of_servers=3

[server]
name=server1
ip=10.20.30.40
password=sdfslkhf    

[server]
name=server2
ip=10.20.30.41
password=sdfslkhf

[server]
name=server3
ip=10.20.30.42
password=sdfslkhf

In questo modo non è necessario preoccuparsi di nomi di sezione indefiniti, e credo che questo stile è più ampiamente utilizzato come bene (sicuramente è come QuickFIX fa, in un modo molto simile a quello che ho descritto).

E probabilmente si può rimuovere la voce number_of_servers, e basta usare la funzione count() per trovare quante sezioni server ci sono.

Altri suggerimenti

C'è un parametro bool opzionale per consentire le voci non registrati nella funzione parse_config_file. E 'impostata su false per impostazione predefinita. Vedere la documentazione qui:

http: //www.boost. org / doc / librerie / 1_45_0 / doc / html / boost / program_options / parse_config_file_id991860.html

Se si chiama questa funzione con true allora sarà aggiungere tutte le voci registrate nel variables_map come stringhe. È possibile verificare se esistono con la funzione variables_map::count.

Mi auguro che aiuta.

Certo che puoi. Le sezioni di server hanno un modello: basta caricare tutti coloro che corrisponde al modello in un elenco di server

.

Le sfide che ha affrontato durante la risoluzione era quello di assicurarsi che le sezioni sono tenute insieme e sono alcun modo confuso.

Alla fine mi sono affidato a un options_description con le note opzioni / finiti e quindi utilizzando le parsed_options che vengono fuori parse_config_file, ho dovuto raccogliere tutte le opzioni non riconosciute (collect_unrecognized). Poi ho dovuto scorrere esso a raccogliere le opzioni in ordine.

Grazie ognuno per il loro contributo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top