通过索引运算符插入 boost::program_options::variables_map
Insert into boost::program_options::variables_map by index operator
我有一个 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 本身
中更新它们
该库旨在存储从命令行或文件解析后的参数。您不能直接使用 operator[]
像 std::map
那样赋值,因为它 returns 是 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_options
的 documentation 中所述。
例如:
po::options_description desc("");
desc.add_options()
("document", po::value<std::string>()->default_value("default_document")
("flag", po::value<bool>()->default_value(false));
由于它公开继承自 std::map<std::string, variable_value>
,因此将其强制转换为 std::map
并照此使用应该相对安全:
(*static_cast<std::map<std::string, variable_value>*>(my_variable_map))[name] = value;
不能保证这足以让 variable_map
使用它,但目前看来是:cpp, h.
很烦人需要这个。
我有一个 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 本身
中更新它们该库旨在存储从命令行或文件解析后的参数。您不能直接使用 operator[]
像 std::map
那样赋值,因为它 returns 是 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_options
的 documentation 中所述。
例如:
po::options_description desc("");
desc.add_options()
("document", po::value<std::string>()->default_value("default_document")
("flag", po::value<bool>()->default_value(false));
由于它公开继承自 std::map<std::string, variable_value>
,因此将其强制转换为 std::map
并照此使用应该相对安全:
(*static_cast<std::map<std::string, variable_value>*>(my_variable_map))[name] = value;
不能保证这足以让 variable_map
使用它,但目前看来是:cpp, h.
很烦人需要这个。