boost::program_options::bool_switch 不支持 defalut_value

作者: , 共 519 字 , 共阅读 0

我们用boost的命令行库program_options解析命令行,在解释布尔命令行时使用下面代码:

using bpo = boost::program_options;
bpo::options_description options;

bool not_ignore;
options.add_options()("i,ignore", 
                      bpo::bool_switch(&not_ignore)->default_value(true),
                      "设置后将忽略xxx");

在运行时发现效果非预期,当设置命令--ignore时,not_ignore变量仍然为true。查了一下文档才发现bool_switch的作用是:

if the option is present on the command line, the value will be 'true'.

也就是说它的作用根本不是switch_bool,而是set_to_true。这个函数名有很大的歧义,用的时候需要留意。

Q. E. D.

类似文章:
相似度: 0.162
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0http://boost.org/上可以查看最新版本号,将下面的 59 换成最新的即可)。
编程 » C++, Boost, 智能指针
如果理解了侵入式容器,侵入式智能指针也很容易理解。传统的智能指针std::shared_ptr使用了和数据无关的引用计数,这带来两个问题:
命令行参数的初步说明,请参考argparse 模块用法实例详解,写的很清晰而详细。
编程 » C++, Boost, 数据容器
Boost.Intrusive 是一个很有意思的实现,里面实现了很多侵入式容器,在特定环境下,可以大大提升性能。
编程 » C++, popen
popen函数可以获取比std::system函数更详细的程序输出。只是正常调用 popen 只能获取 stdout 的输出,而 stderr 的输出被忽略。
Python的命令行包argparse内置了-h, --help命令。但它没有分组,和其它的命令混在一起,并且显示在最前面。我更喜欢把它放在单独的「LOG 和帮助」分组:
安装 selenium ,使用 requestium 来调用 selenium 程序更为简单,因此可一起安装:
编程 » C++, 数据容器, folly
folly::dynamic提供类似于C++的动态类型。和std::any可以容纳任意类型不一样,folly::dynamic只支持保存以下几种类型:
一个好用的 C++性能分析工具需满足几个条件:
编程 » folly, C++, 数据容器
由 Facebook 开发和维护的 C++库 Folly 提供folly::sorted_vector_setfolly::sorted_vector_map,是std::mapstd::set在小数据集上的优化版。代码见: https://github.com/facebook/folly/blob/master/folly/sorted_vector_types.h
msci barra 开发的 CNE5S 模型是中国 A 股最常用的风格因子模型。它包含 10 个风格因子,分别是 BETA、MOMENTUM、SIZE、EARNYILD、RESVOL、GROWTH、BTOP、LEVERAGE、LIQUIDTY、SIZENL。
IT » WSL, 网络共享
现在 windows 里面,把网络共享地址映射到盘符,比如 Y。然后执行下面命令,接下来就能通过/mnt/y/访问到网络共享文件了。