ジェネリックフィルタ

前に読む:データフロープログラミングへの導入

イントロダクション

Aurora Vision Studioで利用可能なほとんどのフィルタには、明確に定義されたタイプの入力と出力があります – それらは特定のタイプのデータにのみ適用可能です。 ただし、さまざまなタイプのデータに適用できる操作の範囲があります。たとえば、ArraySize フィルタは任意のアイテムの配列で動作でき、 TestObjectEqualTo フィルタは同じタイプの任意の2つのオブジェクトを比較できます。このためには ジェネリック フィルタ があり、これはさまざまなタイプのために インスタンス化 できます。

ジェネリック フィルタは、C++の関数テンプレートに非常に似ています。

タイプ定義

各ジェネリック フィルタは、任意の有効な型を表す型変数 T を使用して定義されます。たとえば、GetArrayElement フィルタには次のポートがあります:

ポート タイプ 説明
inArray TArray 入力配列
inIndex Integer 配列内のインデックス
outValue T 配列からの要素

インスタンス化

ジェネリック フィルタがプログラムに追加されると、ユーザーはこのフィルタのインスタンスに使用する T タイプを選択する必要があります。 このプロセスはインスタンス化と呼ばれます。タイプを選択するために使用されるダイアログウィンドウには、2つのバリアントがあります。それらは異なる メッセージのみが表示されるだけです:

このウィンドウは、配列に関連するフィルタに対して表示されます(例:GetArrayElementまたはJoinArrays)。ユーザーは配列の要素のタイプを選択する必要があります。

このウィンドウは、配列に関連しないフィルタに対して表示されます(例:MergeDefault)。ユーザーはオブジェクト全体のタイプを選択する必要があります。

たとえば、GetArrayElement フィルタがプログラムに追加され、ユーザーが T 変数を Real タイプを表すものとして選択した場合、フィルタのインターフェースは次のようになります。

ポート タイプ 説明
inArray RealArray 入力配列
inIndex Integer 配列内のインデックス
outValue Real 配列からの要素

インスタンス化後、フィルタはプログラムエディタに表示され、フィルタの名前によって指定されたインスタンス化されたタイプが表示されます。

プログラムエディタに表示されている2つのジェネリック フィルタの例:配列内の Nil を置き換えるために MergeDefault を実例化し、それらから単一の要素を取得するために GetArrayElement を実例化しています。 指定されたタイプパラメータが異なることに注意してください。

よくある間違いは、必要なのは配列要素の型だけであるにも関わらず、オブジェクト全体の型を指定することです。 たとえば、実数の配列にアクセスするために意図された GetArrayElement フィルタをインスタンス化する場合、要素の型である Real 型を入力してください。しかし、オブジェクト全体の型である RealArray 型ではありません。