Библиотека предназначена для хранения аргументов после синтаксического анализа из командной строки или из файла.Вы не можете напрямую использовать operator[]
для назначения значений, таких как std::map
, потому что он возвращает ссылку const
, см. Аннотацию здесь :
const variable_value & operator[](const std::string &) const;
Если вы действительно действительно хотите вручную назначить значения ключей, вы можете создать std::stringstream
и проанализировать его с библиотекой, см. следующий пример программы
#include <string>
#include <sstream>
#include <iostream>
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp>
#include <boost/program_options/variables_map.hpp>
int main()
{
namespace po = boost::program_options;
std::stringstream s;
s << "document=A" << std::endl << "flag=true" << std::endl;
po::options_description desc("");
desc.add_options()
("document", po::value<std::string>())
("flag", po::value<bool>());
po::variables_map vm;
po::store(po::parse_config_file(s, desc, true), vm);
po::notify(vm);
std::cout << "document is: " << vm["document"].as<std::string>() << std::endl;
std::cout << "flag is: " << (vm["flag"].as<bool>() ? "true" : "false") << std::endl;
return 0;
}
Если вы вместо этогопросто хотите вставить значение для некоторых ключей, когда они отсутствуют, вы можете просто использовать опции default_value
, как описано в документации из boost::program_options
.
Например:
po::options_description desc("");
desc.add_options()
("document", po::value<std::string>()->default_value("default_document")
("flag", po::value<bool>()->default_value(false));