【发布时间】:2013-10-17 17:13:40
【问题描述】:
我正在 SFML 中实现可视化树。 SFML 包含两个重要的绘图类:sf::Drawable 和sf::Transformable。如果将它们捆绑在一起会很好,但事实并非如此。许多对象都继承自两者,即:
class SFML_GRAPHICS_API Text : public Drawable, public Transformable
class SFML_GRAPHICS_API Sprite : public Drawable, public Transformable
class SFML_GRAPHICS_API Shape : public Drawable, public Transformable
对于我的可视化树,我有一个继承自 Drawable 和 Transformable 的 SceneNode 类,并且绘图函数将调用私有 onDraw 本身,然后调用它的子级。但是,许多 SFML 原生类,例如 sf::Text,都有一个私有的绘制函数。所以,我不能创建一个像
class Text: public sf::Text, public SceneNode
然后将其放入可视化树中。对于这些原生类,无论如何我都不需要它们绘制子类,我只想能够将它们作为叶节点添加到可视化树中。问题的症结在于视觉树的每个成员都需要继承自sf::Drawable和sf::Tranformable。我需要能够定义一个继承自这两者的类型。如果我定义虚拟类
class LeafNode: public sf::Drawable, public sf::Tranformable { }
这似乎定义了我想要的类型。然后,SceneNode 将包含std::vector<LeafNode*> m_children。在绘制这些孩子时,我会对每个项目进行动态转换,看看它是否是SceneNode,然后调用绘图函数让SceneNode 绘制它的孩子。
但是由于类型不兼容,以下代码无法编译:
LeafNode * node = new sf::Text("PLAY", font, 20);
理想情况下,我想定义类似
std::vector<sf::Drawable, sf::Transformable*> m_children
这种组合语法意味着每个元素必须同时派生自 sf::Drawable 和 sf::Transformable。这可能吗?
【问题讨论】:
标签: c++ inheritance sfml