Boost中Core模組的typeinfo用法
阿新 • • 發佈:2018-12-03
標頭檔案
boost/core/typeinfo.hpp
作用
與std::typeinfo 功能一致
舉例
#include <boost/core/typeinfo.hpp> #include <boost/core/lightweight_test.hpp> #include <iostream> int main() { BOOST_TEST( BOOST_CORE_TYPEID( int ) == BOOST_CORE_TYPEID( int ) ); BOOST_TEST( BOOST_CORE_TYPEID( int ) != BOOST_CORE_TYPEID( long ) ); BOOST_TEST( BOOST_CORE_TYPEID( int ) != BOOST_CORE_TYPEID( void ) ); boost::core::typeinfo const & ti = BOOST_CORE_TYPEID( int ); boost::core::typeinfo const * pti = &BOOST_CORE_TYPEID( int ); BOOST_TEST( *pti == ti ); BOOST_TEST( ti == ti ); BOOST_TEST( !( ti != ti ) ); BOOST_TEST( !ti.before( ti ) ); char const * nti = ti.name(); std::cout << nti << std::endl; boost::core::typeinfo const & tv = BOOST_CORE_TYPEID( void ); boost::core::typeinfo const * ptv = &BOOST_CORE_TYPEID( void ); BOOST_TEST( *ptv == tv ); BOOST_TEST( tv == tv ); BOOST_TEST( !( tv != tv ) ); BOOST_TEST( !tv.before( tv ) ); char const * ntv = tv.name(); std::cout << ntv << std::endl; BOOST_TEST( ti != tv ); BOOST_TEST( !( ti == tv ) ); BOOST_TEST( ti.before( tv ) != tv.before( ti ) ); return boost::report_errors(); }
原始碼
#include <boost/current_function.hpp> #include <functional> namespace boost { namespace core { class typeinfo { private: typeinfo( typeinfo const& ); typeinfo& operator=( typeinfo const& ); char const * name_; public: explicit typeinfo( char const * name ): name_( name ) { } bool operator==( typeinfo const& rhs ) const { return this == &rhs; } bool operator!=( typeinfo const& rhs ) const { return this != &rhs; } bool before( typeinfo const& rhs ) const { return std::less< typeinfo const* >()( this, &rhs ); } char const* name() const { return name_; } }; inline char const * demangled_name( core::typeinfo const & ti ) { return ti.name(); } #define BOOST_CORE_TYPEID(T) typeid(T) } // namespace core