gpt4 book ai didi

C++ 界面风格编程。需要一条出路

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:39 24 4
gpt4 key购买 nike

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)
};

但这很糟糕。

最佳答案

BaseQueue 中的

push_back 未在继承链的 BaseDeque 端实现,因此最子类仍然是抽象类。

我认为你试图在此处强加一种不应该存在的类关系。注意标准库中的 dequevector 是不同的容器类型,而 queue 之类的东西使这些容器适应非常精确的接口(interface),而不是试图继承.

关于C++ 界面风格编程。需要一条出路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com