假设我们有一个函子,它包含几个不同的 ref 限定或简单的 const 限定重载operator ()
。我想为使用 STL 算法的不同上下文调用不同的算法。也就是说,我想根据operator ()
我提供给 STL 算法的仿函数值/引用的常量或“左值/右值”来正确重载要调用的函数。说,有假设算法recurrent_all_of
。我可能期望在 STL 中找到的形式是:
template< typename Iterator, typename BinaryFunctor >
bool
recurrent_all_of(Iterator begin, Iterator end, BinaryFunctor functor)
{
if (begin == end) {
return false;
}
Iterator previous = begin;
while (++begin != end) {
if (!functor(*previous, *begin)) {
return false;
}
previous = begin;
}
return (++previous != end);
}
但是为了满足引用友好的要求,表格应该如下:
template< typename Iterator, typename BinaryFunctor >
bool
recurrent_all_of(Iterator begin, Iterator end, BinaryFunctor && functor)
{
if (begin == end) {
return false;
}
Iterator previous = begin;
while (++begin != end) {
if (!std::forward< BinaryFunctor >(functor)(*previous, *begin)) {
return false;
}
previous = begin;
}
return (++previous != end);
}
有什么误解吗?为什么 STL 算法不是这样设计的?