【问题标题】:Can one add boost program_options and parameters after CLI parsing is finished?CLI解析完成后可以添加boost program_options和参数吗?
【发布时间】:2017-12-02 23:40:47
【问题描述】:
boost.program_options 库存储并允许以编程方式访问程序运行时命令行上提供的参数。
一旦程序正在运行并且已经解析了所有 CLI 参数,调用一些库函数(我不知道,或者易于编码)来实例化选项/参数,以及更改选项的值参数是否可行?换句话说,是否可以简单地启动(即添加)已在源代码中配置但在调用时未提及的现有选项?
为什么?假设程序有一个 GUI,并且用户想要更新在命令行中设置的一些设置。
【问题讨论】:
标签:
c++
boost
boost-program-options
【解决方案1】:
你必须重新解析。
program_options_descriptions 的动态添加更适用于您有一个添加其他选项的插件而不是更改已经解析的内容的情况。或者用于获取多组选项(基本、高级、环境变量和配置文件来源)并填充 variables_map。
options_description 有一个 add() 重载,采用另一个 options_description 实例并将该实例中的选项添加到此实例中。但是,这样的添加不会导致 variable_map 中已解析的项目发生变化。
【解决方案2】:
重新启动程序将使用第二个命令行创建第二个进程。这不是什么大问题,但是您需要进程间通信才能将第二个命令行转发到第一个进程。幸运的是,boost 还有Boost.Interprocess。
一旦您的进程发现有一个预先存在的进程,并转发了第二组参数,它就可以关闭。我会在主进程中重新处理命令行选项。