boost::program_options::bool_switch 不支持 defalut_value

作者: , 共 520 字 , 共阅读 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.104
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0
编程 » C++, Boost, 智能指针
如果理解了侵入式容器,侵入式智能指针也很容易理解。传统的智能指针std::shared_ptr使用了和数据无关的引用计数,这带来两个问题:
编程 »
Python的命令行包argparse内置了-h, --help命令。但它没有分组,和其它的命令混在一起,并且显示在最前面。我更喜欢把它放在单独的「LOG 和帮助」分组:
编程 » C++, 数据容器, folly
folly::dynamic提供类似于C++的动态类型。和std::any可以容纳任意类型不一样,folly::dynamic只支持保存以下几种类型:
编程 » C++, Boost, 数据容器
Boost.Intrusive 是一个很有意思的实现,里面实现了很多侵入式容器,在特定环境下,可以大大提升性能。
编程 » SQL
现在 Access 用的人应该不多了,本来我以为我也不可能用这玩意儿,但最近在用 VBA 通过 SQL 处理数据时,发现它的语法是 Access 的语法。平时对 SQL Server 语法相对熟悉一些。下文总结了 Access 和 SQL Server 语法的差异。
编程 » Linux, rsync
在同步一个超大文件时,发现 rsync 并没有按照预期的同步一个文件。而使用md5sum检验文件内容时,原始文件和目标文件的内容并不一样。
资源 »
人到中年,越来越胖。健康饮食越来越重要。我去看了一下中美的居民膳食指南。
IT » windows terminal, SSH
微软放出了 windows terminal 的正式版,它不光是 windows 自带的命令行终端,也可以用来替代 mobaterm 之类的 SSH 客户端。下面是其设置的一些笔记。