私はすべての基本クラスを継承するGUI要素のシステムを作ろうとしています。親クラスでDrawメソッドを呼び出すことによって、すべての子要素を呼び出せるようにしたいと考えています。リスト内の子オブジェクトのメソッドを呼び出す最良の方法は?
基本要素:
interface GuiElementBase
{
protected:
std::vector<GuiElementBase> children;
public:
void Draw()
{
for (int i = 0; i < children.size(); i++)
children[i].Draw();
}
void AddChild(GuiElementBase child)
{
children.push_back(child);
}
};
テキスト要素:
class GuiElementText : public GuiElementBase
{
public:
void Draw()
{
GuiElementBase::Draw();
// + some text-specific drawing code
}
};
実装:
GuiElementText* TextTest;
void GUI::Init()
{
TextTest = new GuiElementText();
TextTest->AddChild(GuiElementText());
}
void GUI::Draw()
{
TextTest->Draw();
}
コンストラクタ、描画コード、および他の方法をここに私はこれまで持っているもの、本質的です簡単にするために省略されています。
TextTestの子を更新しようとすると、「子」ベクトルがGuiElementBaseであるため、明らかにGuiElementBase :: Draw()を呼び出すだけです。私は、基本クラスではなく子オブジェクトを呼び出す方法を見つけるのが難しいです。すべての助けが大変ありがとう!
'interface'は何ですか? –
@AluanHaddad構造体 – hkva
マクロの代わりに純粋な抽象クラスを使用するか、それが何であっても使用する必要があります。 –