0
我正在使用Boost程序選項來分析CLI。Boost Program Options默默忽略未知值標記。爲什麼?
我面對的問題是,如果在CLI中沒有' - '或' - '的CLI中有任何標記,庫默默忽略它而不是拋出異常。
下面是示例程序:
try
{
options_description od;
od.add_options()
("dummy,d", value<int>()->required(), "does nothing...");
variables_map vm;
wparsed_options po = parse_command_line(argc, argv, od);
store(po, vm);
notify(vm);
cout << vm["dummy"].as<int>() << endl;
}
catch (const error& e)
{
cout << e.what() << endl;
}
下面是一些樣品運行:
Debug>test
the option '--dummy' is required but missing
Debug>test -d
the required argument for option '--dummy' is missing
Debug>test -d 1
1
Debug>test -d 1 asas
1
現在,前三運行的預期。但是,爲什麼第三次運行不會拋出任何異常? 'asas'不匹配任何選項,-d不接受向量。我究竟做錯了什麼?或者圖書館是這樣設計的?
得到預期的行爲。可悲的是,拋出的異常不包含導致異常的令牌(或令牌列表)。這使得向用戶顯示的消息非常模糊。 – anni 2013-04-29 06:33:16
如果您在輸入中獲得定位,則可以允許一個(如果您喜歡多個標記)位置,然後手動打印包含不正確標記的錯誤。 – Riga 2013-04-29 15:12:06
好主意。但是,如果定位沒有明確提及,人們會預期該庫默認會引發異常。如果設置了'allow_unregistered',它應該收集這些令牌,但如果它不是,那麼庫肯定會拋出異常。 – anni 2013-05-02 07:32:02