Why C++ containers does not implement interfaces
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Why is the C++ STL is so heavily based on templates? (and not on interfaces)
号
为什么
这样地:
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通常避免使用虚拟函数和类似的抽象。
Well, I obtain
vector from somewhere and I need to givelist of the same data to somewhere. And now I need to convertvector tolist in O(n)
号
没问题,列表已经有一个范围构造函数:
1 | std::list<your_element_type_here> yay(your_vector.begin(), your_vector.end()); |