【发布时间】:2020-05-15 07:06:11
【问题描述】:
我正在尝试在 C++ 中实现某种对象组合。这个想法是创建一组所有数据结构,这些数据结构可以通过组合只知道基本数据结构操作的抽象类来创建。例如,可以通过组合 pusher 和 popper 来创建堆栈,通过组合 queuer 和 popper 来创建队列等。
问题在于,尽管 Pusher、Popper 和 Queuer 仅作为抽象类,并且它们永远不会被实例化,但它们必须知道数据结构如何在内部存储数据。
我们的目标是拥有不可知的抽象类,这些抽象类仅用于将方法定义传递给具体的数据结构类,方式如下:
class Pusher {
public:
void Push(int value) {
// Simulates internal logic of pushing a value.
elements.push_back(value);
}
}
class Popper {
public:
int Pop() {
// Simulates internal logic of popping a value.
int popped_value = elements.back();
elements.pop_back();
return popped_value;
}
}
class Stack: public Pusher, public Popper {
private:
vector<int> elements;
}
您可以看到,尽管 Pusher 和 Popper 不知道元素,但 Stack 知道,这才是最重要的。但是,此代码无效且无法编译。我怎样才能写出有效的东西来达到同样的效果?
【问题讨论】:
-
您是否尝试了一个常见的
Container基类,并使用虚拟继承? -
用CRTP怎么样?
-
模板类如何存储对容器对象的引用?
标签: c++ data-structures abstract-class object-composition