为什么C++容器不实现接口

Why C++ containers does not implement interfaces

本文关键字:实现 接口 C++ 为什么      更新时间:2023-10-16

可能重复:
为什么C++STL在很大程度上是基于模板的?(不在接口上(

为什么stlQt容器都不实现接口。例如,对于vectorslists,它可以是Enumerable

像这样:

template <typename T>
class Enumerable
{
public:
    virtual const T at(int k) = 0;
    //....
    virtual ~Enumerable() {}
};
template <typename T>
class Vector: public Enumerable<T>
{
public:
    virtual const T at(int k);
    //....
};

因此,我使用的代码迫使我使用其中使用的具体类型的容器。

您试图实现的是什么,而您认为无法使用标准容器?你的问题的答案是他们不需要。使用模板,你可以在零运行时成本的情况下获得接口带来的所有优势。

STL(标准模板库(的设计不需要通常的虚拟函数。在设计STL时,虚拟函数的成本非常高,足以在代码的关键部分避免它们。泛型编程通过只使用具体类型来实现这一点。这里有解释http://en.wikipedia.org/wiki/Standard_Template_Library

好吧,我从某个地方获得vector,我需要将相同数据的list提供给某个地方。现在我需要在O(n(中将vector转换为list

没问题,列表已经有了一个范围构造函数:

std::list<your_element_type_here> yay(your_vector.begin(), your_vector.end());
STL通常避免使用虚拟函数和类似的抽象。Enumerable的概念是由迭代器的概念建模的,迭代器使用模板抽象。如果您想要容器的虚拟抽象,请查看Thomas Becker的any_iterator标头。