У меня есть карта 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...