我有一个boost::program_options::variables_map
参数。现在,我想像键值对一样手动插入此地图。
示例:
boost::program_options::variables_map args
args["document"] = "A";
args["flag"] = true;
问题是我已经有这两个选项
desc.add_options()
("document", po::value<std::string>())
("flag", po::value<bool>());
,但是有时会从命令行为它们提供空输入。因此,如果它们为空,那么我必须在po :: variables_map args本身内部对其进行更新
答案 0 :(得分:1)
该库旨在在从命令行或文件解析后存储参数。您不能直接使用operator[]
来分配类似std::map
的值,因为它会返回const
引用,请参见注释here:
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
的{{3}}中所述使用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));
答案 1 :(得分:0)