Pergunta

Eu tenho um aplicativo que usa Boost.Program_options para armazenar e gerenciar suas opções de configuração. No momento, estamos afastando-se de arquivos de configuração e usando a configuração de banco de dados carregados em seu lugar. Eu escrevi uma API que lê as opções de configuração do banco de dados pelo nome do host e nome de instância. (Legal!) No entanto, tanto quanto eu posso ver, não há maneira de manualmente inserir estas opções para o impulso Program_options. Alguém já usou isso antes, todas as idéias? Os documentos de impulso parecem indicar a única maneira de obter material em que o mapa é através da função de armazenamento, o que quer lê a partir da linha de comando ou arquivo de configuração (não o que eu quero). Basicamente procurando uma maneira de inserir manualmente o DB ler valores para o mapa.

Foi útil?

Solução

A minha resposta vem um pouco tarde demais, mas eu passei algum tempo tentando fazer algo semelhante e encontrou uma solução irritantemente óbvia (ninguém meter mais está olhando para isso) ...

Recordando que deriva boost::program_options::variables_map de std::map<std::string, boost::program_options::variable_value>, você pode fazer o processamento mapa STL perfeitamente legal, incluindo uma inserção ...

namespace po = boost::program_options;
po::variables_map vm;
vm.insert(std::make_pair("MyNewEmptyOption", po::variable_value());
vm.insert(std::make_pair("MyNewIntOption", po::variable_value(32, false));
po::notify(vm);

-Edmond-

Outras dicas

Você olhou para as extra_parser ou allow_unregistered funções de Boost::Program_Options? Dependendo exatamente como o programa funciona, um ou ambos devem ser capazes de suportar o que você quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top