1

假设我们有一个函子,它包含几个不同的 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 算法不是这样设计的?

4

0 回答 0