динамическая конфигурация с бустом program_options - PullRequest
0 голосов
/ 13 декабря 2010

Есть ли способ загрузить динамический INI-файл, подобный приведенному ниже.

[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

Здесь идея состоит в том, что серверы, которые здесь определены, очень специфичны для развертывания программного обеспечения;поэтому администратор решает, сколько серверов участвует в конфигурации.

Есть ли способ справиться с этим в boost program_options?

Ответы [ 4 ]

3 голосов
/ 13 декабря 2010

Другой, потенциально более стандартный способ будет выглядеть следующим образом:

[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

Таким образом, вам не нужно беспокоиться о неопределенных именах разделов, и я думаю, что этот стиль также более широко используется (определенно, это то, как это делает QuickFIX, очень похоже на то, что я обрисовал в общих чертах)разделы есть.

2 голосов
/ 13 декабря 2010

Существует необязательный параметр bool, разрешающий незарегистрированные записи в функции parse_config_file. По умолчанию установлено значение false. Смотри документацию здесь:

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

Если вы вызовете эту функцию с помощью true, то все незарегистрированные записи будут добавлены в variables_map в виде строк. Вы можете проверить, существуют ли они с помощью функции variables_map::count.

Надеюсь, это поможет.

0 голосов
/ 22 декабря 2010

Проблемы, с которыми я столкнулся при решении этой проблемы, заключались в том, чтобы убедиться, что разделы объединены и никоим образом не перепутаны.

В конце концов, я использовал опцию options_description с известными / конечными опциями, а затем, используя parsed_options из parse_config_file, мне пришлось собрать все нераспознанные опции (collect_unrecognized). Затем мне пришлось повторить его, чтобы выбрать варианты по порядку.

Спасибо всем за их вклад.

0 голосов
/ 13 декабря 2010

Конечно, вы можете. Разделы сервера имеют шаблон: просто загрузите все соответствующие шаблону в список серверов.

...