11 Temmuz 2017 Salı

boost::any

Giriş
Şu satırı dahil ederiz.
#include <boost/any.hpp>
Bu sınıf sakladığı tipin ValueType olmasını ister. Bunun ne olduğunu tam anlamadım.

boost::any_cast metodu boost::any yapısında saklanan nesneyi istediğimiz tipe çevirmek için kullanılır.

Constructor - value
Metodun içi şöyle. Small object optimization yapmıyor. Her nesneyi heap'te saklıyor.
template<typename ValueType>
any(const ValueType & value)
  : content(new holder<
BOOST_DEDUCED_TYPENAME remove_cv<
  BOOST_DEDUCED_TYPENAME decay<const ValueType>::type>::type>(value))
{
}
Örnek
Şöyle yaparız.
auto *foo = new Foo;
boost::any var(*foo);
delete foo;
Şöyle yaparız.
Foo foo;
boost::any var(foo);
Şöyle yaparız.
boost::any var(Str{}); // beware of "most vexing parse"
empty metodu
Şöyle yaparız.
std::cout << var.empty() << std::endl;
operator = metodu
Şöyle yaparız.
boost::any var;
var = std::string("StackOverflow");
Bu sınıfa atanan bir değer artık sadece boost::any_cast ile geri alınabilir. Şöyle yaparız.
std::cout << boost::any_cast<std::string>(var) << std::endl;
Kullanım
Örnek
Şöyle yaparız.
std::map<std::string, boost::any> map;

boost::any value = std::string("Hello");

map.insert(std::make_pair(std::string("Key"), value));

Hiç yorum yok:

Yorum Gönder