我正在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
。這可能嗎?