如何测试对象以查看它是否具有某个成员?或者有没有办法看一个对象是否是某个类的实例?
我正在使用角色图片的继承结构。有String_Pics,HCat_Pics,VCat_Pics和Frame_Pics。它们都来自Pic_Base。用户使用句柄类“Picture”,其中包含指向对象的智能指针。每个对象都存储一个指向它所基于的图像的指针(另一个图像的帧,两个水平连接的图像等)。
Ex:围绕VCat-Pic的Frame-Pic,VCat-Pic中的两个图片都是String_Pics周围的Frame_Pics。
***************
* *
* *********** *
* * This * *
* * is * *
* *********** *
* *********** *
* * The * *
* * Example * *
* *********** *
* *
***************
Frame_Pics有“框架字符”的数据成员,但没有其他类。我正在编写一个函数,它将递归地更改结构中每个帧的帧字符。也许我错过了一种方法来做到这一点,但我正在寻找一种方法来测试我正在处理的对象是否是Frame_Pic,从而是否有意义尝试更改帧字符
我的第一直觉是尝试像if (p->frame_char)
这样的东西,其中frame_char是Frame_Pic的一个数据成员的名字,但我不知道如何做到这一点。
答案 0 :(得分:2)
您可以尝试将指针动态转换为Frame_pic
并查看它是否返回非空。
Frame_Pic *frame =dynamic_cast<Frame_Pic*>(p);
if(frame != nullptr){
//It is Frame_Pic
frame->frame_char;
}
尽管采用cast
方式不是一个好主意。尝试编写不需要它的虚函数。
答案 1 :(得分:1)
事实证明,我真的不需要对会员资格进行直接测试。这实际上是一个非常适合多态性的问题:
我在Pic_Base中声明了virtual
函数“reframe”,并定义了“frame”的版本来更改字符,以及其他类的版本根据需要通过嵌套图片进行递归。