Здравствуйте, Sinclair, Вы писали:
interface IMonoid<T>
{
static T Zero{get;}
static T operator+(T t1, T t2)
static T operator*(T t1, T t2)
}
S>var c = MatrixMultiply<IntMulMonoid, IntAddMonoid, int>(a, b)
Я вот только не понял зачем IntMulMonoid, IntAddMonoid
role IntMonoid extednds int
{
public static int Zero = 0;
}
и достаточно всего
Ну или если результат не int добавить функцию приведения добавить в интерфейс
static implicit operator <R> (T value);
И вызов соотвественно
var c = MatrixMultiply<IntMulMonoid,double>(a, b)