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

时间:2019-01-18 21:21:55

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

我目前正在尝试在仿真中实现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")
;

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

我知道可以通过简单地检查是否提供了option2并在以后分配默认值来解决该问题。问题是,我想避免使用更干净的解决方案编写此IF语句(约30个参数)。

如果需要,这是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路径作为参数。

1 个答案:

答案 0 :(得分:0)

我相信您只希望最后一次致电通知。

我试图做一个通知者来做到这一点,但是事后你不能在variables_map中改变一个值。我能想到的最好的办法是创建一个假变量,但随后将其存储到variables_map变得工作量很大,我放弃了!