虚拟转发迭代器?

| 我看了STL的前向迭代器。我在任何地方都看不到任何虚拟功能。如果我有一个想要字符串的正向迭代器的库,我如何允许该函数接受任何返回字符串的正向迭代器?我可以使用标准库中的任何内容吗?     
已邀请:
        没有虚拟方法,因为它们并不是要被多态使用(在运行时多态的常识中),而是通过模板(静态多态)来使用。常见的方法是具有根据迭代器的类型对迭代器进行模板化的功能。您可以在STL算法标头中找到许多示例:
template <class InputIterator, class Distance>
inline void distance(InputIterator first, InputIterator last, Distance& n);
在您的特定情况下:
template <class ForwardIterator> // or InputIterator or whatever your needs are
void acceptIterators( ForwardIterator start, ForwardIterator end );
它必须引用字符串的其他限制可以用traits和enable_if类型实现:
template <class ForwardIterator>
std::enable_if< std::is_same< std::string,
                              typename iterator_traits<ForwardIterator>::value_type > >
void acceptIterators( ForwardIterator start, ForwardIterator end );
使用c ++ 0x中的typetrait,但如果在不支持它们的编译器中需要
enable_if
is_same
,则可以使用boost。 如果您需要能够在运行时切换迭代器的类型,则可能需要研究“ 5”,它对提供运行时多态接口的特定迭代器执行类型擦除。有关文章在C ++中的面向对象和通用编程之间的关系中进行了描述,可以在Adobe STLab中找到该实现。     
        您可以编写自己的迭代器,并将其用作:
std::for_each( make_myiterator(c.begin), make_myiterator(c.end), do_some() );
您可以从ѭ7继承,也可以查看Boost Iterator Facade,它将帮助您编写自己的迭代器。     
        通常的方法是制作使用迭代器功能模板的功能。这是标准库的工作。     
        如果您想接受任何迭代器,例如您需要使用模板的字符串。没有其他所有迭代器都继承的顶级迭代器类。 编写符合标准的C ++迭代器可能会很麻烦,但是Boost.Iterators如果您不怕模板,会为您提供很大帮助。有一个示例,说明如何使用iterator_facade创建一个简单的迭代器,您应该看一下。 Boost.Iterators是仅标头的库,因此无需将任何内容与您的应用程序/库链接。     

要回复问题请先登录注册