- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
default_value(false), "") 我希望能够多次指定参数,每次出现都会切换此-6ren">
我目前拥有的是
("someOption,s", po::bool_switch(&variable)->default_value(false), "")
我希望能够多次指定参数,每次出现都会切换此 bool 的值。
例子:
default value = false
./program -s
value == true
./program -s -s
value == false
./program -s -s -s
value == true
有没有办法多次使用像 bool_switch 这样的东西来反复打开/关闭?我需要我的自定义类型和验证器吗?
也许我可以以某种方式允许多次指定选项,然后执行 vm.count("someOption") 并根据其值(偶数/奇数)切换我的变量。但我更愿意在选项描述 (add_options) 中指定该行为,而无需稍后检查和修改值。
最佳答案
我真的花了 70 分钟试图让它工作使用
composing()
允许重复implicit_value({}, "")
自定义通知器的 vector 值虚拟选项(它们只运行一次)notifier()
- 无论选项出现和成功解析的频率如何,它们只运行一次store
/notify
之后从 variables_map
获取 vector 值选项的大小。遗憾的是,大小始终为 1,大概是因为“组合”实际上并没有在单个存储操作中组合(它仅在多个运行之间组合,所以不同的来源选项,然后?)。可悲的结论是,似乎没有办法。在这里,我惯用的口头禅得到了证实:“简单胜过无所不知的设计”,我建议做同样的事情,但使用 https://github.com/adishavit/argh :
#include "argh.h"
#include <iostream>
namespace {
template <typename It>
size_t size(std::pair<It, It> const& range) { return std::distance(range.first, range.second); }
}
int main(int argc, char** argv) {
argh::parser p(argc, argv);
auto num_s = size(p.flags().equal_range("s"));
bool const variable = num_s % 2;
std::cout << "Repeated: " << num_s << ", effective " << std::boolalpha << variable;
std::cout << " (Command line was:";
while (*argv) std::cout << " " << *argv++;
std::cout << ")\n";
}
当使用各种命令行运行时,打印:
Repeated: 0, effective false (Command line was: ../build/sotest)
Repeated: 1, effective true (Command line was: ../build/sotest -s)
Repeated: 2, effective false (Command line was: ../build/sotest -s -s)
Repeated: 3, effective true (Command line was: ../build/sotest -s -s -s)
Repeated: 4, effective false (Command line was: ../build/sotest -s -s -s -s)
Repeated: 3, effective true (Command line was: ../build/sotest -s -s -s --other bogus)
关于c++ - 多次使用 boost::program_options bool_switch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51723237/
我有一个程序接受一组可用于选择某些行为的互斥标志。假设标志是 --csv , --xml和 --json分别选择 CSV、XML 和 JSON 作为输出格式。也可以通过单个 --format 来完成。
我目前拥有的是 ("someOption,s", po::bool_switch(&variable)->default_value(false), "") 我希望能够多次指定参数,每次出现都会切换此
下面的代码使用 po::bool_switch(&flag) 来自动为 flag 分配正确的值。 我的编译命令是clang++ -std=c++11 test.cpp -o test -lboost_
我是一名优秀的程序员,十分优秀!