一个单继承类体系的RTTI实现(根据类名判断类指针)

MFC中,我们见识了MFCRTTI的实现,在MFC中,使用CruntimeClass以及DECLARE_DYNAMICDECLARE_IMPLEMENT宏等实现的RTTI功能相当强大,但是在我们一般的程序中还用不着这么复杂的RTTI,在C++标准中提供的typeid操作符和type_info信息提供的RTTI支持就相当的简单,只是简单的比较两个类对象和指针是否属于同一类;而对于我们平时简单的应用,这些也足够了;要使用C++标准提供的RTTI功能,必须要求编译器打开GR编译选项,但是在一些嵌入式开发中,我们无法使用这个编译选项,那么我们就得自己模拟实现一个RTTI,以下就是我的一个实现:它根据一个类继承中的类的名字来判断一个指针是属于哪个类,依靠虚函数来完成功能,最后抽象到一个宏实现整个RTTI。具体编码如下:

 

//使用这个宏来为我们的类生成一个返回类名字的虚函数

#define DECLARE_RTTI(ClassName) /

public: /

    virtual PCHAR GetClassName() /

{ /

    return #ClassName; /

}

 

//类体系中的基类,实现一个IsKindOf方式,可以根据类名判断类

class Base

{

    DECLARE_RTTI(Base)

public:

    BOOL IsKindOf(PCHAR szClassName)

    {

        if (0 == strcmp(GetClassName(), szClassName))

        {

            return TRUE;

        }

        return FALSE;

    }

};

 

//派生类

class Derive : public Base

{

    DECLARE_RTTI(Derive)

public:

};

 

//这个函数只得到一个基类指针,它可以根据这个指针知道到底是哪个来的指针

void Test(Base * p)

{

    if (p->IsKindOf("Base"))

    {

        printf("This is the base class pointer!/n");

    }

    else if (p->IsKindOf("Derive"))

    {

        printf("This is the derive class pointer!/n");

    }

    else

    {

        printf("This is the new derived class: %s/n", p->GetClassName());

    }

}

 

//派生类

class DeriveEx : public Derive

{

    DECLARE_RTTI(DeriveEx)

};

 

 

int main(int argc, char* argv[])

{

    DeriveEx obj; //你可以在这里变换类,看输出结果了

    Test(&obj);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值