我正在 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?