我有在一個選項的情況下,升壓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