Я недавно начал использовать boost::program_options
и нашел, что это очень удобно. Тем не менее, есть одна вещь, которую я не смог правильно кодировать себе:boost :: program_options: итерация и печать всех опций
Я хотел бы перебрать все параметры, которые были собраны в boost::program_options::variables_map
, чтобы выводить их на экран. Это должно стать удобной функцией, которую я могу просто вызвать, чтобы перечислять все параметры, которые были установлены без необходимости обновлять функцию, когда я добавляю новые параметры или для каждой программы.
Я знаю, что я могу проверять и выводить отдельные параметры, но, как сказано выше, это должно стать общим решением, которое не обращает внимания на фактические параметры. Я также знаю, что я могу перебирать содержимое variables_map
, так как это просто расширенный std::map
. Затем я мог проверить тип, содержащийся в сохраненной переменной boost::any
, и использовать .as<>
, чтобы преобразовать его в соответствующий тип. Но это означало бы кодирование длинного блока переключения с одним случаем для каждого типа. И это не похоже на хороший стиль кодирования для меня.
Итак, вопрос в том, есть ли лучший способ перебора этих параметров и вывода их?
Спасибо за ссылку и идею о RTTI , Я надеялся, что смогу предотвратить создание структуры для всех поддерживаемых типов, которые мне придется управлять, если типы увеличиваются, но, похоже, это будет невозможно. В принципе, я хотел передать доллар типам - например, если они поддерживают «оператор <<», все работает нормально, иначе компиляция должна завершиться неудачей. – shiin