1. 程式人生 > >Boost中Core模組的typeinfo用法

Boost中Core模組的typeinfo用法

標頭檔案

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