フィルター

[algorithms.parallel_pipeline.filter]

filter クラス・テンプレートは、parallel_pipeline アルゴリズムで厳密にタイプ指定されたフィルターを表し、そのテンプレート・パラメーターにはフィルターの入力タイプと出力タイプを指定します。filterは、ファンクターから、または operator&() を使用して 2 つ filter オブジェクトを組み合わせてることで作成できます。同じ filter オブジェクトを複数の & 式で再利用できます。

filter クラスは、parallel_pipeline 関数とともにのみ使用します。


// <oneapi/tbb/parallel_pipeline.h> ヘッダーで定義 

namespace oneapi { 
    namespace tbb { 

        template<typename InputType, typename OutputType> 
        class filter { 
        public: 
            filter() = default; 
            filter( const filter& rhs ) = default; 
            filter( filter&& rhs ) = default; 
            void operator=(const filter& rhs) = default; 
            void operator=( filter&& rhs ) = default; 

            template<typename Body> 
            filter( filter_mode mode, const Body& body ); 

            filter& operator&=( const filter<OutputType,OutputType>& right ); 

            void clear(); 
        } 

        template<typename T, typename U, typename Body> 
        filter<T,U> make_filter( filter::mode mode, const Body& f ); 
        template<typename T, typename V, typename U> 
        filter<T,U> operator&( const filter<T,V>& left, const filter<V,U>& right ); 
    } // namespace tbb 
} // namespace oneapi

要件:

filter_mode 列挙

メンバー関数

filter()

未定義フィルターを作成します。

警告

operator&() または parallel_pipeline で未定義フィルターを使用した場合の結果は未定義です。

template<typename Body>
filter(filter_mode mode, const Body &body)

与えられた body のコピーを使用して、InputType タイプの入力値を OutputType タイプの出力値にマップし、指定された mode で動作する filter を作成します。

void clear()

*this を未定義フィルターに設定します。

非メンバー関数

template<typename T, typename U, typename Func>
filter<T, U> make_filter(filter::mode mode, const Func &f)

filter<T, U>(mode, f) を返します。

template<typename T, typename V, typename U>
filter<T, U> operator&(const filter<T, V> &left, const filter<V, U> &right)

leftright の組み合わせを表す filter を返します。この組み合わせは、left の出力値が right の入力値であるかのように動作します。

デダクション・ガイド


template<typename Body> 
filter(filter_mode, Body) -> filter<filter_input<Body>, filter_output<Body>>;

説明:

  • filter_input<Body>Body::operator() 入力パラメーター・タイプのエイリアスです。Body::operator() 入力パラメーターのタイプが flow_control である場合、filter_input<Body>void です。

  • filter_output<Body>Body::operator() 戻りタイプのエイリアスです。