У меня есть карта std::map<std::string, boost::any>
, которая поступает из пакета boost::program_options
. Теперь я хотел бы распечатать содержимое этой карты:
for(po::variables_map::const_iterator it = vm.begin(); it != vm.end(); ++it) {
std::cerr << it->first << ": " << it->second << std::endl;
}
К сожалению, это невозможно, потому что boost::any
не имеет operator<<
.
Каков самый простой способ печати этой карты?
Я мог бы определить свой собственный оператор вывода для любого, который автоматически пытается отобразить каждый any
в int, затем дважды, затем строку и т.д., каждый раз игнорируя ошибки и стараясь отбросить до тех пор, пока кастинг не будет успешным, и я могу напечатайте как указанный тип.
Но в Boost должен быть более простой метод? Мне нужно что-то вроде обратного lexical_cast
...