c ++如何测试一个类,看看它是否有成员?

时间:2013-01-16 02:37:53

标签: c++ polymorphism member ascii-art

如何测试对象以查看它是否具有某个成员?或者有没有办法看一个对象是否是某个类的实例?

我正在使用角色图片的继承结构。有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的一个数据成员的名字,但我不知道如何做到这一点。

2 个答案:

答案 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”的版本来更改字符,以及其他类的版本根据需要通过嵌套图片进行递归。