boost :: program_options:是否可以将一个选项设置为另一个选项的默认值?

问题描述 投票:0回答:1

我正在尝试在我的模拟中实现boost :: program_options库。在阅读(许多)参数时,我想做这样的事情

namespace po = boost::program_options;
po::options_description desc("Allowed options");
desc.add_options()
    ("option1", po::value<int>(&int1), "set value for option1")
    ("option2", po::value<int>(&int2)->default_value(int1), "set value for option2, default is option1")
;

问题:default_value(int1)不使用提供的int1,如果同时给出两个选项(每个命令行或配置文件),而是使用notify()之前的值。

我知道只需检查是否提供了option2并稍后分配默认值就可以解决问题。问题是,我想避免用更清洁的解决方案为~30个参数编写这个IF语句。

如果需要,这是program_option代码的其余部分

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);

if (vm.count("config")) {
    std::ifstream cfs(config_file, std::ifstream::in);
    po::store(po::parse_config_file(cfs, desc), vm);
    po::notify(vm);
}

其中“config”选项将config_file路径作为参数。

c++ default-value boost-program-options
1个回答
0
投票

我相信你最后只想打电话通知一次。

我尝试使用通知程序执行此操作,但事后您无法更改variables_map中的值。我能想出的最好的方法是创建一个假变量,然后将它存储到variables_map变得太过分了,我放弃了!

© www.soinside.com 2019 - 2024. All rights reserved.