c++ 基础类 type_info 的源码,精简版,cpp20规范

代码太长了,分两个框

struct __type_info_node;
    extern __type_info_node __type_info_root_node;
    
_CRT_BEGIN_C_HEADER

struct __std_type_info_data
{
    const char * _UndecoratedName;
    const char   _DecoratedName[1];
    __std_type_info_data() = delete;
    __std_type_info_data(const __std_type_info_data&) = delete;
    __std_type_info_data(__std_type_info_data&&) = delete;
    __std_type_info_data& operator=(const __std_type_info_data&) = delete;
    __std_type_info_data& operator=(__std_type_info_data&&) = delete;
};
_VCRTIMP int __cdecl __std_type_info_compare( _In_ const __std_type_info_data* _Lhs,  _In_ const __std_type_info_data* _Rhs  );
_VCRTIMP size_t __cdecl __std_type_info_hash(  _In_ const __std_type_info_data* _Data  );
_VCRTIMP const char* __cdecl __std_type_info_name(  _Inout_ __std_type_info_data* _Data,  _Inout_ __type_info_node*     _RootNode  );

_CRT_END_C_HEADER

第二个框:

class type_info
{
private:    mutable __std_type_info_data _Data;
public:
    type_info(const type_info&) = delete;
    type_info& operator=(const type_info&) = delete;

    size_t hash_code() const { return __std_type_info_hash(&_Data); }

    bool operator==(const type_info& _Other) const noexcept
    {  return __std_type_info_compare(&_Data, &_Other._Data) == 0;  }

    bool before(const type_info& _Other) const noexcept
    {  return __std_type_info_compare(&_Data, &_Other._Data) < 0; }

    const char* name() const noexcept
    {  return __std_type_info_name(&_Data, &__type_info_root_node); }

    const char* raw_name() const noexcept
    {  return _Data._DecoratedName; }

    virtual ~type_info() noexcept;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值