Предположим, что у вас есть объект boost::any
и объект boost::variant
.
Я ищу общую функцию convert
, которая принимает параметр шаблона T, являющийся специализированным boost::variant
, например. boost::variant<int, std::string>
и волшебным образом преобразует boost::any
в один из доступных типов данного boost::variant
.
template<T>
T convert(const boost::any& any) {
// Some generic conversion code here or throw exception if conversion is not possible!
}
int main(int argc, char** args) {
typedef boost::variant<int, std::string> TVar;
boost::any any="Hello World";
TVar variant=convert<TVar>(any);
// variant contains "Hello World"
return 0;
}
Мне интересно, можно ли написать такую функцию или по какой-то причине это невозможно?
return any_cast<T>(&any)
? Вы должны перехватывать исключения, и в таком случае вы можете вернуть сконструированный по умолчаниюT
или что-то еще, но этого ли вы хотите? - person skypjack   schedule 12.02.2016any_cast<T>(&any)
. - person Aleph0   schedule 12.02.2016