【问题标题】:Inheriting options with Boost.ProgramOptions使用 Boost.ProgramOptions 继承选项
【发布时间】:2017-01-10 10:58:50
【问题描述】:

有没有一种好方法可以在 boost 中从另一个 options_description 对象链接继承程序选项?例如

auto general_options = po::options_description{};
general_options.add_options()
   ("flag", "Information for --flag");

auto specific_options_one = po::options_description{};
specific_options.add_options(general_options)
    ("specific_flag_one", "Information for specific flag");

auto specific_options_two = po::options_description{};
specific_options_two.add_options(general_options)
    ("specific_flag_two", "Information for specific flag");

即获取 specific_options 选项实例以使用另一个实例的选项以及它自己的选项

这样的事情将使我能够为specific_options_onespecific_options_two 实例指定--flag 选项。例如

./a.out --flag --specific_flag_one
./a.out --flag --specific_flag_two

由于--flag 被继承,两者都有效

【问题讨论】:

    标签: c++ boost boost-program-options


    【解决方案1】:

    在文档的Multiple Sources Example 中,您可以看到可以将option_description 添加到另一个@,这意味着您可以执行以下操作:

    auto general_options = po::options_description{};
    general_options.add_options()
       ("flag", "Information for --flag");
    
    auto specific_options_one = po::options_description{};
    specific_options.add(general_options).add_options(general_options)
        ("specific_flag_one", "Information for specific flag");
    
    auto specific_options_two = po::options_description{};
    specific_options_two.add(general_options).add_options(general_options)
        ("specific_flag_two", "Information for specific flag");
    

    那么specific_options_onespecific_options_two 都将包含来自general_options 的标志

    【讨论】:

    • 编辑了答案以使其完美契合!谢谢
    • @Curious Fair :)
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多