我正在使用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 *,它将选项分解为令牌,你将处理并决定哪些是有效的。 –