我想要一个标题中描述的功能。
我注意到与包含任何类型(int、double)元素的任何类型(列表、向量等)的容器一起使用的 STL 算法通过使用迭代器类型作为模板参数来提供通用性,例如
template<typename _II, typename _OI>
inline _OI
copy(_II __first, _II __last, _OI __result)
在算法适用于任何类型的元素之前,这是一个很好的方法。元素类型的唯一要求是它必须具有复制构造函数。
但是假设我们有一种具体的类型
class MyElement
{
public:
void doSomethingWithElement();
};
我们想实现一个函数,通过调用函数来处理这种类型的元素数量doSomethingWithElement()
。
编写一个接收特定类型容器的函数不是很方便,因为许多容器以相同的方式处理(例如迭代器),如果需要处理不同类型的容器,我们将被迫复制代码。编写模板工作正常,但看起来很难看,因为我们必须在声明它的地方(在头文件中)实现函数。此外,当我们只想处理一种类型的元素时,将这种类型参数化并不是实现目标的正确方法。
我一直在考虑可以像这样使用的迭代器接口
void processContainer(IIterator<MyElement> begin, IIterator<MyElement> end);
如果此迭代器具有在派生类中实现的纯虚拟 operator++ 和 operator*,我们可以将这些对象传递给processContainer
. 但是有一个问题:如果 IIterator 是抽象类,我们不能在 的实现中实例化它processContainer
,如果我们传递一个指向 IIterator 的指针,这个函数就可以修改它。
有人知道其他黑客可以做到这一点吗?还是比上述方法更好的另一种方法?提前致谢。