我正在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
类,从绘制对象和变形的继承和绘制函数将调用私有的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
。这可能吗?