Pointer'a Olmayan Çevrim
Metodun içi şöyle.
Eğer çevrim gerçekleştirilemiyorsa null döner. Açıklaması şöyle
template<typename ValueType>
ValueType * any_cast(any * operand) BOOST_NOEXCEPT
{
return operand && operand->type() == boost::typeindex::type_id<ValueType>()
?
&static_cast<any::holder<BOOST_DEDUCED_TYPENAME remove_cv<ValueType>::type> *>
(operand->content)->held
: 0;
}
Eğer çevrim gerçekleştirilemiyorsa bad_any_cast exception atılır. Elimizde şöyle bir değişken olsunboost::any a = 1;
Bu değişkeni bool'a çevirmek istersek exception fırlatılır.try {
boost::any_cast<bool>(a);
}
catch(...) {
std::cout << "caught" << std::endl;
}
Pointer'a ÇevrimEğer çevrim gerçekleştirilemiyorsa null döner. Açıklaması şöyle
Elimizde şöyle bir değişken olsunReturns: If passed a pointer, it returns a similarly qualified pointer to the value content if successful, otherwise null is returned. If T is ValueType, it returns a copy of the held value, otherwise, if T is a reference to (possibly const qualified) ValueType, it returns a reference to the held value.Throws: Overloads taking an any pointer do not throw; overloads taking an any value or reference throws bad_any_cast if unsuccessful.
boost::any a = 1;
Değişken aynı tipten pointer'a çevrilemiyorsa null döner.bool *p = boost::any_cast<bool>(&a);
// Prints true
std::cout << std::boolalpha << (p == nullptr) << std::endl;
Çevrilebiliyorsa düzgün bir pointer dönerint *q = boost::any_cast<int>(&a);
// Prints false
std::cout << std::boolalpha << (q == nullptr) << std::endl;
Çevrim Örnekleri
Şöyle yaparız.
#include <boost/any.hpp>
int main()
{
// Any holding a value
{
boost::any any_value(1);
int value = boost::any_cast<int>(any_value);
int& reference = boost::any_cast<int&>(any_value);
int* pointer = boost::any_cast<int>(&any_value);
}
// Any holding a pointer (which is nothing else but a value)
{
int integer = 0;
boost::any any_ptr(&integer);
int * pointer = boost::any_cast<int*>(any_ptr);
int*& pointer_reference = boost::any_cast<int*&>(any_ptr);
int** pointer_pointer = boost::any_cast<int*>(&any_ptr);
}
}
Hiç yorum yok:
Yorum Gönder