バイナリ演算子を宣言するとき、少なくとも1つの演算子型が包含型でなければなりません。これは一般的に良い設計の決定と言えます。しかし、次のコードでこのエラーが発生するとは思わなかった:ジェネリックと "バイナリ演算子のパラメータの1つは、格納する型でなければなりません"エラー
public class Exp<T>
{
public static Exp<int> operator +(Exp<int> first, Exp<int> second)
{
return null;
}
}
この演算子の問題点は何ですか?なぜこのケースがC#の演算子オーバーロード制限に該当するのですか?この種の宣言を許可するのは危険ですか?
ここで問題となるのは、オペランドが型を含むことに関連していないということではありません。危険である可能性がありますが、「特殊化」は許されません。 – nakhli
はい。あなたがしようとしているのは、C#で直接可能でないC++ *テンプレートの特殊化*のように見えます。 [this](http://stackoverflow.com/questions/600978/how-to-do-template-specialization-in-c)を見てください。 –