我有一个需要多次枚举迭代器的函数,但根据MSDN,"一旦你增加了输入迭代器的任何副本,其他副本都不能安全地进行比较,解除引用或增加."
因此,为了使事情变得更容易,我不想为复制数据和枚举副本的非正向迭代器创建单独的实现,而是希望将我的方法限制为只接收前向迭代器,并静态拒绝输入迭代器.
现在我有类似的东西:
template<typename It, typename TCallback /*signature: bool(value_type)*/>
bool EnumerateTwice(const It &begin, const It &end, TCallback callback)
{
for (It it = begin; it != end; ++it)
if (!callback(*it))
return false;
for (It it = begin; it != end; ++it)
if (!callback(*it))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
但没有什么限制It成为一个前向迭代器.
如何将限制放在模板化函数上?(C++ 03)