命令行参数未存储(使用 boost)
Command line argument not stored (using boost)
我想将命令行值存储到变量中。这是我的完整代码:
#include <iostream>
#include <boost/program_options.hpp>
int main(int argc, char *argv[]) {
int nselect = 100;
boost::program_options::options_description desc("Allowed options");
desc.add_options()
("help,h", "print usage message")
("nselect,N", boost::program_options::value<int>(&nselect), "number to select");
boost::program_options::variables_map vm;
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
if (vm.count("help")) {
std::cout << desc << "n";
return 0;
}
std::cout<<"nselect = "<<nselect<<"n";
return(0);
}
我将其编译为 g++ a.cpp -lboost_program_options
,然后运行:
$ ./a.out -N 5
nselect = 100
为什么它不存储命令行值?
分辨率:
调用 notify(vm)
会自动将值存储到变量中指定的变量中。或者可以从 vm 映射它,如下面 @Matthieu-Brucher 的答案。
我实际上会为ProgramOptions做一些不同的,更惯用的东西:
namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
("help,h", "print usage message")
("nselect,N", po::value<int>()->default_value(100), "number to select");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
int nselect = vm["nselect"].as<int>();
我没有在您的代码中调用notify
,这可能是唯一要更改的内容,尽管为了可读性,我会选择惯用的方式。
相关文章:
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 使用 boost 进行标记化会给出相同的输出
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- 执行时使用 boost::asio::d eadline_timer 时出错
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 避免使用 boost::进程间::消息队列创建文件
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- 程序崩溃使用boost::asio
- 如何使用 boost beast websocket 客户端收听 websocket feed?
- 在 Julia 中使用 boost 库和 Windows 上的 Cxx.jl
- 如何使用 boost 将流放入缓冲区
- 使用boost::multiprecision cpp_int左移时出现超时错误
- 使用 boost::p rogram_options 指定多个标志
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- yum :在 CentOS 上使用 Boost 1.69 而不是默认 (1.53) 版本
- 使用 boost::p roperty_tree::p tree 如何获取特定键的值
- 如何在使用 Boost MSM 编写的状态机中直接访问任何状态