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

标签 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")
;

问题: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 路径作为参数。

最佳答案

我相信您最后只想调用一次通知。

我试图制作一个通知器来执行此操作,但事后您无法更改 variables_map 中的值。我能想出的最好办法是创建一个假变量,但随后将其存储到 variables_map 变得太多工作,我放弃了!

关于c++ - boost::program_options: 是否可以将一个选项设置为另一个选项的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261575/

相关文章:

php - <select> 下拉默认值

Python 运行时错误(SyntaxErrorException): default value must be specified here

c++ - 提升程序选项选择

C++ 预处理器变量

c++ - 字符的 UTF-8 转换

c++ - 禁用复制和 move 语义的最简洁方法

c++ - 如何在 boost::program_options 中为 vector<string> 指定默认值

c++ - 使用O(1)辅助空间(LeetCode)从排序数组中删除重复项

scala - 如何在 Scala 中表示一个空的 Char?

boost-program-options - 如何自动将简单标志的值存储到变量中?