发布网友 发布时间:2024-10-24 09:24
共5个回答
热心网友 时间:2024-10-25 14:50
MFC中有这样的例子,"类的动态识别技术"。
热心网友 时间:2024-10-25 14:42
可以,请下载一本<Inside C++ Object Model>看一下,
里面有类的具体结构,找到RTTI,然后小小的黑一下就可以了。
但类的类型存储并没有被标准化,所以要注意一下,因为换个编译器可能就不对了。
=============
前提这个子类的父类是从N个已知父类中去选
如(B代表Base, D代表Derive)
class B1;
class B2;
class B3;
class D : public B2;
D d;
有几种方法:
1. B1 *p = dynamic_cast<B1*>(&d);
如果p不为NULL,则B1是d的父类
B2,B2类似比较
2. typeid(B1) == typeid(d); 是父类就为真
PS: 在编译器设置中要打开RTTI才行
热心网友 时间:2024-10-25 14:43
应该没有关键字
在 MFC 深入浅出中有讲到一种解决办法
比较复杂,如果弄懂了,水平可大幅提高
热心网友 时间:2024-10-25 14:43
你可以dynamic_cast转换呀,判断返回值。
或者你可以向MFC那样,自己实现这个功能
typeid也是个选择
热心网友 时间:2024-10-25 14:45
用RTTI信息是可以识别类的信息的,但是难度相对比较高。究其原因就是C++允许多继承实现。