C ++界面风格编程。需要出路
template <typename T>
class BaseQueue
{
public :
virtual void push_back(T value) = 0;
//other virtual methods
};
template <typename T>
class BaseDeque: public virtual BaseQueue<T>
{
public:
virtual void push_front(T value) = 0;
//other virtual methods
};
//Realisation
template <typename T>
class VectorQueue: public BaseQueue<T>
{
typedef typename std::vector<T> array;
private: array adata;
public:
VectorQueue()
{
adata = array();
}
void push_back(T value)
{
adata.push_back(value);
}
};
template <typename T>
class VectorDeque: virtual public VectorQueue<T>, virtual protected BaseDeque<T>//,
{
void push_front(T value)
{
VectorQueue::adata.push_front(value);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
VectorDeque<int> vd = VectorDeque<int>();//here is a error
int i;
std::cin >> i;
return 0;
}
我有这样的错误:“C2259:'VectorDeque':无法实例化抽象类......”。我该如何解决? VectorQueue类已经实现了BaseQueue类的每个虚方法。但是编译器不知道它。我看到的唯一方法是写这样的东西:
template <typename T>
class VectorDeque: virtual public VectorQueue<T>, virtual protected BaseDeque<T>//,
{
void push_front(T value)
{
VectorQueue::adata.push_front(value);
}
void push_back(T value)
{
VectorQueue::push_back(value);
}
//repeat it fo every virtual method of BaseQueue class (interface)
};
但它太糟糕了。
没有找到相关结果
已邀请:
3 个回复
目浆搽
的
未在继承链的
侧实现,因此最后一个类仍然是抽象的。 我想你在这里强迫一个不应该存在的阶级关系。请注意标准库中的
和
是不同的容器类型,例如
使这些容器适应非常精确的接口而不是尝试继承。
砷竣阿
乏摩纶誊伟