【发布时间】:2020-12-25 23:13:07
【问题描述】:
我需要一个接受begin, end 输入迭代器作为参数的虚拟 函数,但我不想将它与特定容器的迭代器类绑定。
标准(现代)C++ 库中是否有任何东西允许从客户端隐藏特定的迭代器类并表现为 GenericInputIterator、GenericForwardIterator 等?我想它应该是多态的。
【问题讨论】:
-
TLDR:不,C++ 不能以这种方式工作。 C++ 库中没有类似的东西,因为从根本上说,该语言无法使用它。有些东西要么是模板,要么是类。没有虚拟模板函数之类的东西,就是这样。
-
@SamVarshavchik 没有什么能阻止您编写类型擦除的迭代器类,这正是问题所要求的。它会是 v e y s l o w。 那是标准库没有的原因。 Boost 称之为
any_iterator。 -
@HTNW - 这正是我所说的。所以你说“不”...
-
教科书或网上有很多文章(例如,Scott Meyers)解释了为什么 C++ 标准库不提供这样的“类型擦除”或“通用”(另一个术语我已经见使用)迭代器。本质上,这样的迭代器将被限制为仅具有由所有迭代器类型提供的操作(大多数迭代器类型具有一些不被所有其他迭代器类型共享的操作)并且该迭代器支持的每个操作都将具有最坏情况下的性能对于所有可能的迭代器。
标签: c++