为什么C++容器不实现接口
Why C++ containers does not implement interfaces
可能重复:
为什么C++STL在很大程度上是基于模板的?(不在接口上(
为什么stl
和Qt
容器都不实现接口。例如,对于vectors
和lists
,它可以是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());
Enumerable
的概念是由迭代器的概念建模的,迭代器使用模板抽象。如果您想要容器的虚拟抽象,请查看Thomas Becker的any_iterator标头。
相关文章:
- 如何从实现接口的模板化类实例访问结构
- 如何在C++中实现接口
- unique_ptr实现接口时对已删除函数的引用
- 避免对实现接口的类使用多个几乎相同的声明
- C#COM组装实现C 接口
- 当传递对类的引用时,优于另一个函数,即实现接口
- 通过其方法的子集实现接口
- C ++类实现接口,接口具有采用任何实现该接口的类的方法
- 错误:在 C++ 中实现接口模式时未定义对 typeinfo 的引用
- 与模板实现接口的类模板
- 在主应用程序中声明的 dll 中实现接口 - C++
- Objective-C类实现C 接口
- 如何添加实现C 接口的标签
- 强制接收实现接口的超类指针作为方法的参数
- 我可以部分实现接口层次结构吗
- 是否可以通过继承实现接口
- 在c++中实现接口
- 如何使用谷歌测试测试实现接口的不同类/结构
- 使用成员函数模板实现接口的功能
- C++ 11 实现接口的方法不可用。为什么?