function_node
[flow_graph.function_node]
着信メッセージのユーザー定義ボディーを実行するノード。
// <oneapi/tbb/flow_graph.h> ヘッダーで定義
namespace oneapi {
namespace tbb {
namespace flow {
template < typename Input, typename Output = continue_msg, typename Policy = /*implementation-defined*/ >
class function_node : public graph_node, public receiver<Input>, public sender<Output> {
public:
template<typename Body>
function_node( graph &g, size_t concurrency, Body body, Policy /*unspecified*/ = Policy(),
node_priority_t priority = no_priority );
template<typename Body>
function_node( graph &g, size_t concurrency, Body body,
node_priority_t priority = no_priority );
~fuction_node();
function_node( const function_node &src );
bool try_put( const Input &v );
bool try_get( Output &v );
};
} // namespace flow
} // namespace tbb
} // namespace oneapi
要件:
Input
タイプは、[defaultconstructible] の DefaultConstructible の要件と、[copyconstructible] ISO C++ 標準の CopyConstructible の要件を満たしている必要があります。Output
タイプは、[copyconstructible] ISO C++ 標準の CopyConstructible の要件を満たしている必要があります。Policy
タイプは、軽量、キューおよび拒否ポリシーまたはデフォルトにすることができます。Body
タイプは、FunctionNodeBody 要件を満たしている必要があります。
function_node
には、ユーザーによる同時実行の制限が適用されます。事前定義された値の 1 つに設定できます。ユーザーは、std::size_t
タイプの値を 1 から tbb::flow::unlimited の間に設定して同時実行性を制限できます。
同時実行の制限により直ちに処理できないメッセージは、Policy テンプレートの引数に基づいて処理されます。
function_node
は、graph_node
、receiver<Input>
、および sender<Output>
です。
function_node
には、discarding と broadcast-push プロパティーがあります。
function_node
に渡されたボディー・オブジェクトはコピーされます。メンバー変数を更新してもノードの作成に使用された元のオブジェクトには影響しません。ノードの外部からボディー・オブジェクト内に保持されている状態を確認する必要がある場合、copy_body 関数を使用して更新されたコピーを取得します。
メンバー関数
template<typename Body>
function_node( graph &g, size_t concurrency, Body body,
node_priority_t priority = no_priority );
body
のコピーを呼び出す function_node
を作成します。body
への同時
呼び出しのほとんどは、同時に行われます。
この関数はノードの優先順位を指定します。
template<typename Body>
function_node( graph &g, size_t concurrency, Body body, Policy /*unspecified*/ = Policy(),
node_priority_t priority = no_priority );
body
のコピーを呼び出す function_node
を作成します。body
への同時
呼び出しのほとんどは、同時に行われます。
function_node( const function_node &src )
src
の作成時の状態と同じ初期状態で function_node
を作成します。作成される function_node
は src
と同じ graph
オブジェクトへの参照を持ち、src
で使用される初期ボディーのコピーおよび src
と同じ同時実行のしきい値を持ちます。src
のプレデセッサーおよびサクセサーはコピーされせん。
新しいボディー・オブジェクトは、src
の作成時に提供された元のボディーのコピー作成されます。src
の作成後に src
ボディーのメンバー変数に対して行われた変更は、新しい function_node.
のボディーには影響しません。
bool try_put( const Input &v )
同時実行の制限が適用されると、受信メッセージ v
に対するユーザー定義 body を実行します。それ以外の場合は、ノードのポリシーに応じて受信メッセージ v
をキューに投入するか拒否します。
戻り値: 入力が受け付けられた場合は true
、それ以外は false
を返します。
bool try_get( Output &v )
戻り値: false
デダクション・ガイド
template <typename Body, typename Policy>
function_node(graph&, size_t, Body, Policy, node_priority_t = no_priority)
->function_node<std::decay_t<input_t<Body>>, output_t<Body>, Policy>;
template <typename Body>
function_node(graph&, size_t, Body, node_priority_t = no_priority)
->function_node<std::decay_t<input_t<Body>>, output_t<Body>, /*default-policy*/>;
説明:
input_t
はBody
入力引数タイプのエイリアスです。output_t
はBody
戻りタイプのエイリアスです。
例
データ・フロー・グラフの例は、function_node
が入力データに対し計算を実行して結果をサクセサーに渡す方法を示しています。