Не произвольно, вам нужно иметь некоторые статические типы, с которыми вы хотите работать в C ++.
Так что вы можете проверить или привести к определенному типу, используя any::type()
и any_cast()
,Например:
const boost::any& any = someMap["Key"].type();
if (int* i = boost::any_cast<int>(&any)) {
std::cout << *i << std::endl;
} else if (double* d = boost::any_cast<double>(&any)) {
// ...
Но что-то вроде следующего не может быть сделано вообще из-за статической типизации C ++:
magically_restore_type(someMap["Key"]).someMethod();
Использование чего-то вроде boost::any
в C ++ почти всегда неХорошая идея, именно потому, что обработка произвольных типов неинтересна.Если вам нужно обрабатывать только известный конечный набор типов, не используйте boost::any
- есть лучшие варианты, такие как boost::variant
или полиморфные классы.