c++ - 如何修复cocosdx中的钻石子类

标签 c++

我有一个基类:

class MTBGameObject : public CCNodeRGBA

我还创建了另外两个类:

class MTBGamePlayer : virtual public MTBGameObject, virtual public CCSprite
class MTBGameObstacle : virtual public MTBGameObject

但现在我无法使用 MTBGamePlayer 的任何属性,也无法对其进行转换。

最佳答案

我一直在寻找这个问题的解决方案,但找不到任何东西.. 所以我想到了这个解决方案,我知道它不是最好的,但除非它运行良好。

class MTBGameObject {
    ...
    virtual CCNodeRGBA* self() = 0;
}

然后在子类中我必须重写自身函数:

class MTBGamePlayer : public MTBGameObject, public CCNodeRGBA {
    ...
    CCNodeRGBA* MTBGameObstacle::self() {
        CCNodeRGBA* node = dynamic_cast<CCNodeRGBA*>(this);
        return node;
    }
}

class MTBGameObstacle : public CCSprite, public MTBGameObject {
    ...
    CCNodeRGBA* MTBGamePlayer::self() {
        CCNodeRGBA* node = dynamic_cast<CCNodeRGBA*>(this);
        return node;
    }   
}

关于c++ - 如何修复cocosdx中的钻石子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342965/

相关文章:

c++ - 在 Qt 中围绕 QWidget 拖动对象

c++ - Windows Python C 扩展仅适用于我自己的 Python 构建(使用 VC++ 2008 Express 的 32 位构建)

c++ - operator <= 重载 2 个类并转换 ctor

c++ - 类 : avoid double indentantion 的 vim 自动缩进构造函数

c++ - 何时对多参数构造函数使用显式说明符?

c++ - 在C++中使用2个参数和一个lambda函数检查列表中元素的存在

c++ - 模板类构造函数重载决议

c++ - 将内存池与需要对齐内存的 cpu 一起使用是个好主意吗?

c++ - 我的程序在 Windows 机器上崩溃但在 Linux 上运行正常

c++ - 如何在 struct 数据结构中使用 map STL 并初始化 map 然后引用它?