我有在一个选项的情况下,升压program_options(v1_49)()中的问题定义为构成,也隐式的()。我的意图是实现类似于perl的-D选项,以便您可以执行-D或-Dname并多次使用它。我options_description是:与构成()和implicit_value升压program_options()不是“组成的”
( "debug,D",
bpo::value<vector<string> >()
->composing()
->implicit_value(vector<string>(1,"1")),
"Set debug level."
),
这似乎在大多数情况下工作正常,但每当-D没有值出现在命令行中,所有早期值都被清除,例如:
$ ./a.out -D abc -D 255 -D xyz
variables_map["debug"] = {"abc", "255", "xyz"}
$ ./a.out -D -D 255 -D xyz
variables_map["debug"] = {"1", "255", "xyz"}
$ ./a.out -D abc -D -D xyz
variables_map["debug"] = {"1", "xyz"}
$ ./a.out -D abc -D 255 -D
variables_map["debug"] = {"1"}
我想我明白为什么会发生这种情况,隐式值{“1”}会替换现有的矢量而不是添加到它。有什么我可以做得到这个工作,或者是boost :: program_options的限制吗?
您可以尝试只具有'的std :: string'内含价值,而不是一个'的std :: VECTOR'之一。 – Xeo 2012-08-07 18:42:33
不确定你的意思,隐式值的类型必须与值的类型匹配。如果不是,则该语句不会编译。 – user9645 2012-08-10 12:00:20
那么我在'boost/program_options/detail/value_semantic.hpp:xparse()'中发现了破损的代码:在'value_store = m_implicit_value;'的情况下,没有'm_composing == true'的检查。任何人都可以帮助建议一些方法来追加'value_store'而不是分配给它? – user9645 2012-08-17 19:42:07