私は(例示的な目的のために簡単な例、いつものように)、以下のような機能を書きたいとしよう:数値型のみを受け入れる汎用関数を.NETで記述することはできますか?
Public Function calcSqSum(Of T)(ByVal list As IEnumerable(Of T)) As T
Dim sumSq As T
For Each item As T In list
sumSq += (item * item)
Next
Return sumSq
End Function
あなたはおそらく推測できるとおり、一般的なオブジェクトはに保証されていないので、この関数はエラーが発生+演算子を実装します。私の知る限り、数値型(整数、倍精度、小数点など)があります。
数値タイプを受け入れることができる(準)汎用関数を作成する方法はありますか?そのようなすべての型の関数を明示的にオーバーロードする必要はありませんか?
また、型が '+'演算子(または一般に数値型に関連付けられ、関数で使用される演算子)を実装しているかどうかを何らかの形でチェックすることもできます。
自分自身をより良くすることはできませんでした。 –
これは私が疑うところです...これは、クラスが特定の演算子を実装しているかどうかを確認するために、二次的な考え方を達成する方法がないことを意味しますか? –
実行時に特定の演算子*をチェックすることはできますが、コンパイル時の一般制約はチェックできません。 T.operator +が可能な場所はありません。 –