ネタ元 → operator()に代わるもの
C#-genericsが最も苦手とするトコを直撃してますねぃ。
そう、基本的になんもかんもobjectに置き換えることで
parameterized-typeを実現するC#流のgenericsでは相当ツラいす。
(二次元の)行列を実現しようとしておるようだが、
複素数 Complex<T> すら C#-generics では満足に書けません。
Complex<T>の各種演算が総崩れになります。
「四則演算できる」を表すinterfaceを持ち合わせていないので
制約を指定できんのですな。
C++のtemplateはコンパイル時にまるっと置き換えちゃうし、
ダック・タイピングのおかげで制約の必要がなく、
字面でおっけぃならするりと呑みこんでくれますからねー
.NET generics と C++ template はなまじ構文がそっくりなだけに、
実現手段がまるで違うことが理解しづらいんですな。
C++ならこんな↓おフザケもできちゃうます。
#include <complex>
#include <string>
#include <iostream>
using namespace std;
int main() {
// 複素文字列!?
complex<string> x("こんにちは","Hello, ");
complex<string> y("世界","world");
complex<string> z = x + y;
cout << z << endl;
}