通过索引运算符插入 boost::program_options::variables_map

eto*_*ntz 5 c++ boost boost-program-options

我有一个boost::program_options::variables_map参数。现在我想像键值对一样手动插入到这个地图中。例子:

boost::program_options::variables_map args

args["document"] = "A";

args["flag"] = true;
Run Code Online (Sandbox Code Playgroud)

问题是我已经有了这两个选项

desc.add_options()
    ("document", po::value<std::string>())
    ("flag", po::value<bool>());
Run Code Online (Sandbox Code Playgroud)

但有时它们会从命令行获得空输入。所以如果它们是空的,那么我必须在 po::variables_map args 本身中更新它们

him*_*elf 1

由于它公开继承自std::map<std::string, variable_value>它,因此将其强制转换std::map和使用应该相对安全:

(*static_cast<std::map<std::string, variable_value>*>(my_variable_map))[name] = value;
Run Code Online (Sandbox Code Playgroud)

不能保证这足以使用variable_map它,但目前它似乎是:cpph

令人烦恼的是,这是需要的。