我正在使用Boost的program_options庫編寫一個程序。現在,我想允許它使用配置解析器不知道的任意代碼進行擴展 - 但仍然會傳遞給它一些特定的選項。我可以使用Boost program_options獲取多個任意鍵值對嗎?
我的想法是以某種方式傳遞一個鍵值映射,甚至可能是一個program_options :: variable_map。事情是,program_options需要知道哪些選項提前預期,我不能直接使用我喜歡的鍵映射。
所以,我想也許我可以讓program_options接受帶有字符串鍵的任意鍵值對(如果需要的話,字符串值),把這些字符串中的字符串放到字符串或std :: experimental :: any ,然後再傳遞。
爲了更具體一些,我將舉一個例子(儘管它不必完全像這樣)。我會寫:
$ magic_app --key1 val1 --key2 val2 --key3 val3 positional1 positional2
,並假設program_options知道key2
但不是key1
或key3
。然後,它會...
- 解析
key2
, - 創建地圖containins兩個鍵,
key1
和key3
,其值val1
和val2
分別爲(比如字符串值),並 - 解析位置參數
positional1
和positional2
。
因此,應用程序可以通過自己的參數處理器將地圖(可能經過一些轉換)傳遞給另一個組件。
這是可行的嗎?有沒有更簡單/更好的選擇,我可以使用boost::program_options
?
注:
- 一定的相關性this question,這可以作爲一些專用解析後粗的實現 - 鍵將列表中的奇數元素,值將是偶數元素。
- 用戶必須能夠指定
program_options
未知的選項,就像所有其他選項一樣。
你能提供一個你想要做什麼的例子(代碼或僞代碼)嗎? – rhashimoto
Boost.ProgramOptions的要點是能夠檢測用戶是否輸入了錯誤的鍵。你基本上只想要一個程序選項* lexer *,它將選項分解爲令牌,你將處理並決定哪些是有效的。 –