後で取得する必要があるさまざまなデータ型メンバーを運ぶ派生クラス型を受け入れるC++のインターフェイスを提供する最も洗練された方法は何ですか。以下の例は、ContainerクラスがBaseItemの派生バリアントの一種であるItemを「投稿」するメソッドを提供する場合にこれを示しています。後で、派生アイテムを取り戻し、その値を抽出したいと思います。
私が望んでいる主なことは、Containerインターフェース(postとreceive)が将来同じままでありながら、さまざまな「Item」派生型を定義して「渡す」ことを可能にすることです。どういうわけか、これにはテンプレートの方が適しているでしょうか。RTTIは使いたくないです。これには単純でエレガントな答えがあるかもしれませんが、今はそれについて考えるのに苦労しています。
class ItemBase {
// common methods
};
class ItemInt : public ItemBase
{
private:
int dat;
public:
int get() { return dat; }
};
class ItemDouble : public ItemBase
{
private:
double dat;
public:
double get() { return dat; }
};
class Container {
public:
void post(int postHandle, ItemBase *e);
ItemBase* receive(int handle); // Returns the associated Item
};
int main()
{
ItemInt *ii = new IntItem(5);
Container c;
c.post(1, ii);
ItemInt *jj = c.receive(1);
int val = jj->get(); // want the value 5 out of the IntItem
}