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


Why C++ containers does not implement interfaces

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why is the C++ STL is so heavily based on templates? (and not on interfaces)

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

这样地:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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


STL通常避免使用虚拟函数和类似的抽象。Enumerable的概念由迭代器的概念建模,迭代器使用模板抽象。如果您想要为容器进行虚拟抽象,请查看ThomasBecker的any-u迭代器头。


Well, I obtain vector from somewhere and I need to give list of the same data to somewhere. And now I need to convert vector to list in O(n)

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

1
std::list<your_element_type_here> yay(your_vector.begin(), your_vector.end());