没有 C++11 或 Boost :(
我有一个具有以下签名的函数。
template<class INPUT_ITR, class OUTPUT_ITR>
void DoWork(const INPUT_ITR in_it, const INPUT_ITR in_it_end, OUTPUT_ITR out_it, OUTPUT_ITR out_it_end, CONTEXT_DATA)
通常在输入和输出之间会发生一些复杂的处理。但有时需要无操作,并且只需复制数据。如果输入和输出数据类型相同,则该函数支持就地操作。所以我有这个代码。
if (NoOp)
{
if (in_it != out_it)
{
copy(in_it, in_it_end, out_it);
}
}
如果已请求就地操作(迭代器检查),则无需复制任何数据。
这一直很好,直到我用迭代器调用不同数据类型的函数(例如,int32 到 int64)。然后它抱怨迭代器检查,因为它们是不兼容的类型。
error C2679: binary '!=' : no operator found which takes a right-hand operand of type 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<unsigned __int64>>>
这让我有点难过。如果数据类型相同,是否有一种简单的方法来执行此检查,但如果它们是不同的类型,则只需执行复制?
谢谢