|
|
1
14
STL并没有真正使用抽象基类和虚拟函数。相反,它被有意设计成不使用OO(在gof的意义上)并且完全基于模板,目的是“编译时多态性”。模板不关心抽象接口。只要它们具有足够相似的接口(例如,如果要调用
符合STL的迭代器必须重载许多运算符才能像指针一样工作(考虑到容器的限制,尽可能地),包括
|
|
|
2
7
C++标准库在迭代器的实现中不使用多态性和继承性,而是使用C++模板元编程和“概念”的概念(但不是形式语法)。 从本质上讲,如果迭代器类的接口符合一些需求集,它将工作。这组需求称为“概念”。有几个不同的迭代器概念(请参见 this page for a list of all of them )并且它们是分层的。创建兼容C++迭代器的基础是使接口符合概念。对于只向前进方向前进的简单迭代器,这需要:
如果选择一个更高级的迭代器类别,则可能还需要指定减量和加号运算符,以便能够向后查找或查找任意距离。 * C++标准库以非正式的方式频繁使用概念,C++标准委员会试图引入一种在C++中声明它们的正式机制(目前它们只存在于标准库的文档中,而不存在于任何显式代码中)。然而,在提案上的持续分歧导致它被取消了C++0X,尽管它很有可能在之后被重新考虑。 |