我正在 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
对于我的可视化树,我有一个SceneNode
继承自 Drawable 和 Transformable 的类,并且绘图函数将调用私有 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
. 在绘制这些子项时,我将对每个项目进行动态转换以查看它是否为 a SceneNode
,然后调用绘图函数以便SceneNode
绘制其子项。
但是,由于类型不兼容,以下代码无法编译:
LeafNode * node = new sf::Text("PLAY", font, 20);
理想情况下,我想定义类似
std::vector<sf::Drawable, sf::Transformable*> m_children
Where that made-up syntax means that each element must derive from both sf::Drawable
and sf::Transformable
. Is this possible?