1

いくつかの異なる ref 修飾された、または単に const 修飾された のオーバーロードを含むファンクターがあるとしますoperator ()。STLアルゴリズムを使用するさまざまなコンテキストで、さまざまなものを呼び出す必要があります。つまり、operator ()STLアルゴリズムに提供するファンクター値/参照のconstnessまたは「lvalue/rvalue-ness」に依存して呼び出される適切なオーバーロードが必要です。たとえば、仮説アルゴリズムがあります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