STL算法的参考友好性

时间:2014-05-29 04:22:07

标签: c++ stl reference stl-algorithm perfect-forwarding

假设我们有一个仿函数,它包含几个不同的ref-qualified或简单的const-qualified重载operator ()。我想要为STL算法使用不同的上下文调用不同的。也就是说,我希望正确地重载operator ()来调用依赖于constness或" lvalue / rvalue-ness"函子值/引用,我提供给STL算法。比方说,有一个hypotetic算法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算法?

0 个答案:

没有答案