【发布时间】:2012-02-03 19:20:54
【问题描述】:
我有一个函数需要多次枚举一个迭代器,但是according to 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;
}
但没有什么限制 It 成为前向迭代器。
如何对模板化函数施加限制? (C++03)
【问题讨论】: