在 C++ 中提供接口的最优雅方式是什么,该接口接受派生类类型,这些类型携带不同的数据类型成员,然后需要稍后检索。下面的示例说明了这一点,其中 Container 类提供了“发布”一个 Item 的方法,该 Item 将是 BaseItem 的某种派生变体。稍后我想取回派生的 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
}