11 Eylül 2018 Salı

typeindex

Giriş
Şu satırı dahil ederiz.
#include <boost/type_index.hpp>
BOOST_TYPE_INDEX_REGISTER_CLASS
Örnek
Kalıtım varsa şöyle yaparız.
class A {
public:
    BOOST_TYPE_INDEX_REGISTER_CLASS
    virtual ~A(){}
};

struct B: public A {
    BOOST_TYPE_INDEX_REGISTER_CLASS
};
type_id Sınıfı
hash_code metodu
Bu metodun sonucu portable olmak zorunda değil.

pretty_name metodu
T tipi için şöyle yaparız.
boost::typeindex::type_id<T>().pretty_name();
std::string için biraz tuhaf bir çıktı veriyor. Şunu alırız.
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
type_id _with_cvr Sınıfı
pretty_name metodu
Şöyle yaparız
#include <boost/type_index.hpp>

cout << boost::typeindex::type_id_with_cvr<decltype(v)::value_type>().pretty_name();
Çıktı olarak şunu alırız
// when compiled with gcc:
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
Diğer
custom type_index
boost örneği şöyle.
namespace my_namespace { namespace detail {
    template <class T> struct typenum;
    template <> struct typenum<void>{       enum {value = 0}; };
    template <> struct typenum<std::string>{       enum {value = 1}; };

    struct my_typeinfo {const char* const type_;};

    const my_typeinfo infos[2] = {
        {"void"}, {"std::string"}
    };
  ...
}


Hiç yorum yok:

Yorum Gönder