В настоящее время я пытаюсь реализовать библиотеку 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, если оба параметра даны одновременно (либо для командной строки, либо для конфигурации)файл) и вместо этого использовал значение перед уведомлением ().
Я знаю, что проблему можно решить, просто проверив, предоставлен ли параметр 2, и назначив значение по умолчанию позже.Проблема в том, что я хотел бы избежать написания этого оператора IF для ~ 30 параметров с более чистым решением.
При необходимости это остальная часть кода_программы
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 в качестве параметра.