GUI を設計していますが、dynamic_casting を避けることができないため、問題があります。
私のクラス:
class Widget; //base class for all widgets
class Container //contains widgets
{
std::map<std::string, Widget*> m_widgets;
public:
template <class T> T* get(const std::string &name)
{
return dynamic_cast<T*>(m_widgets.at(name)); //I need casting here
}
}
動的キャストを回避するにはどうすればよいですか? GUI はユーザー定義のウィジェットで動作する必要があるため、ウィジェットの種類ごとにコンテナーを用意する余裕はありません。また、ユーザーが自分でウィジェットを保存する必要がないように、すべてのウィジェットにコンテナーが必要です。
なぜキャストが必要なのですか?
class TextBox : public Widget
{
public:
std::string getText(); //I can't have it in Widget class, because it's object-specific
//also, my gui must work with user-defined widgets so I can't provide
//empty virtual functions for everything in Widget
}