gpt4 book ai didi

c++ - 通过索引运算符插入到 boost::program_options::variables_map

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:10 25 4
gpt4 key购买 nike

我有一个 boost::program_options::variables_map 参数。现在我想像键值对一样手动插入到这个 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 本身中更新它们

最佳答案

该库旨在存储从命令行或文件解析后的参数。您不能直接使用 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 选项,如 boost::program_optionsdocumentation 中所述>.

例如:

  po::options_description desc("");
desc.add_options()
("document", po::value<std::string>()->default_value("default_document")
("flag", po::value<bool>()->default_value(false));

关于c++ - 通过索引运算符插入到 boost::program_options::variables_map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56056265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com