我在解决程序中的问题时遇到了一些问题。所以目前每个 block 都会返回一个迭代器,但是迭代器取决于两种情况:
在 block 中找到所需的元素:return resultIter;
在 block 中未找到所需的元素:'return nullptr`
第一种情况很简单也很容易解决,但第二种情况是我遇到麻烦的地方。给定模板参数 InIter
,如何将 nullptr
转换为 InIter
类别?
template< typename InIter, ...>
InInter func(...) {
InIter res = //returns iter to found element if found
loop(...) //if so a token will changed to signify a cancelation
if(token.was_cancelled())
return res; //easy enough
return nullptr; //doesn't work
}
这给了我这个错误:
'nullptr': all return expressions in a lambda must have the same type: previously it was 'test::test_iterator'
有道理,我不能在 lambda 函数中间突然切换返回类型,但我不知道如何解决这个问题。 请注意 相关代码是手头问题的一个非常简化的版本,在它的实际实现中,它位于一个 lambda 表达式中,并且是一个更大的函数调用的一部分。然而,这是唯一相关的部分
我也试过:
return InIter(nullptr);
return (InIter)(nullptr);
返回NULL;
return InIter(NULL);
...
当然这些都不起作用。有没有一种简单的方法可以做到这一点,我只是没有看到?
最佳答案
使用迭代器的预期模式是,如果您想报告您发现没有匹配项,您将返回指向序列末尾的迭代器。
所以如果你调用:
InIter res = find_an_iterator_meeting_an_interesting_condition(begin, end);
如果没有找到匹配项,您将返回 end
。调用者将负责检查该条件。
关于c++ - 返回 nullptr 迭代器,如何转换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24830227/