|  | Home | Libraries | People | FAQ | More | 
      boost::typeindex::type_info
      is a drop-in replacement for std::type_info
      and boost::typeindex::type_index
      is a drop-in replacement for std::type_index.
      Unlike Standard Library versions those classes can work without RTTI.
    
      type_index provides the full
      set of comparison operators, hashing functions and ostream operators, so it
      can be used with any container class.
    
To start using Boost.TypeIndex:
| Replace this: | With the following: | More Info | 
|---|---|---|
| #include <typeinfo> #include <typeindex> | #include <boost/type_index.hpp> | |
| std::type_index | boost::typeindex::type_index | |
| typeid(T) typeid(T).name() // not human readable typeid(variable) | boost::typeindex::type_id<T>() boost::typeindex::type_id<T>().pretty_name() // human readable boost::typeindex::type_id_runtime(variable) | |
| // attempt to save const, volatile, reference typeid(please_save_modifiers<T>) | // cvr = const, volatile, reference boost::typeindex::type_id_with_cvr<T>() | |
| // when reference to `std::type_info` is required const std::type_info& v1 = typeid(int); // other cases const std::type_info* v2 = &typeid(int); | const boost::typeindex::type_info& v1 = boost::typeindex::type_id<int>().type_info(); boost::typeindex::type_index v2 = boost::typeindex::type_id<int>(); | 
        If you are using type_id_runtime()
        methods and RTTI is disabled, make sure that classes that are passed to
        type_id_runtime()
        are marked with BOOST_TYPE_INDEX_REGISTER_CLASS
        macro.
      
        Here is how TypeIndex could be used in boost/any.hpp:
      
| Before | With TypeIndex | 
|---|---|
| #include <typeinfo> | #include <boost/type_index.hpp> | 
| virtual const std::type_info & type() const BOOST_NOEXCEPT { // requires RTTI return typeid(ValueType); } | virtual const boost::typeindex::type_info & type() const BOOST_NOEXCEPT { // now works even with RTTI disabled return boost::typeindex::type_id<ValueType>().type_info(); } | 
        Here is how TypeIndex could be used in boost/variant/variant.hpp:
      
| Before | With TypeIndex | 
|---|---|
| #if !defined(BOOST_NO_TYPEID) #include <typeinfo> // for typeid, std::type_info #endif // BOOST_NO_TYPEID | #include <boost/type_index.hpp> | 
| #if !defined(BOOST_NO_TYPEID) class reflect : public static_visitor<const std::type_info&> { public: // visitor interfaces template <typename T> const std::type_info& operator()(const T&) const BOOST_NOEXCEPT { return typeid(T); } }; #endif // BOOST_NO_TYPEID | class reflect : public static_visitor<const boost::typeindex::type_info&> { public: // visitor interfaces template <typename T> const boost::typeindex::type_info& operator()(const T&) const BOOST_NOEXCEPT { return boost::typeindex::type_id<T>().type_info(); } }; | 
| #if !defined(BOOST_NO_TYPEID) const std::type_info& type() const { detail::variant::reflect visitor; return this->apply_visitor(visitor); } #endif | const boost::typeindex::type_info& type() const { detail::variant::reflect visitor; return this->apply_visitor(visitor); } |