私は最近、文書化されていない の機能を発見しましたboost::program_options
。つまり、次のように、同じプレフィックスを持つオプションのグループを宣言できる特別なワイルドカードとして「*」を受け入れることです。
configOptions.add_options()
("item_*", value<int>(), "items");
この宣言は期待どおりに機能しitem_1
、item_3
、 などを認識しましたが、不明なオプションは拒否されました。さて、問題は、次のように、オプション キーとその値をマップに入力するカスタム検証関数をどのように作成できるかということです。
map<string, int> itemsMap;
options_description items("items options");
items.add_options()
("item_*",value<map<string, int>>(&itemsMap)->multitoken(), "items")
;
私の質問は、validate() 関数内から検証されているオプションのキーを取得するにはどうすればよいですか?
template <typename T> void validate(boost::any& v, const std::vector<std::string>& values, map<string, T> *, int)