典型的 boost program_options的用法如下:
#include <boost/program_options.hpp> using namespace boost::program_options; using namespace std; int main(int argc, char* argv[]) // 需要命令行参数 { int intValue; options_description opts("Mysql performance options"); //增加两个程序选项 opts.add_options() ("help,h", "help message") ("int", value<string>(&intValue)->default_value(1), "a int value") variables_map vm; // 选项存储map容器 store(parse_command_line(argc, argv, opts), vm); //解析参数并存储到vm中 notify(vm); cout << filename << endl; }
假设编译出的二进制文件为 test,运行 ./test --int 5。如果这时候想传入参数-5,写法应该是 ./test --int -5。由于-5与短参数格式难以分辨(-5也是短参数的格式),这时候程序依旧能够编译通过,但是运行的时候会出现参数使用错误。为了支持值为负数的参数,我们可以禁用短参数。具体做饭为将store()函数的调用改为
store(parse_command_line(argc, argv, opts, po::command_line_style::unix_style ^ po::command_line_style::allow_short), vm);
program_options的默认风格为unix_style, 通过 program_options官方文档 可以看到 unix_style是几种 style与的结果,我们只要使用异或的方式就可以把其中某种style去掉。
enum style_t { allow_long = 1, allow_short = allow_long << 1, allow_dash_for_short = allow_short << 1, allow_slash_for_short = allow_dash_for_short << 1, long_allow_adjacent = allow_slash_for_short << 1, long_allow_next = long_allow_adjacent << 1, short_allow_adjacent = long_allow_next << 1, short_allow_next = short_allow_adjacent << 1, allow_sticky = short_allow_next << 1, allow_guessing = allow_sticky << 1, case_insensitive = allow_guessing << 1, allow_long_disguise = case_insensitive << 1, unix_style = (allow_short | short_allow_adjacent | short_allow_next | allow_long | long_allow_adjacent | long_allow_next | allow_sticky | allow_guessing | allow_dash_for_short), default_style = unix_style };
现在重新编译运行程序,运行 ./test --int -5 就可以正确输出 -5了。
时间: 2024-11-14 12:29:41