Скажи, что у меня есть:
public class Matrix<T>
{
T[][] values;
...
}
Я хочу добавить оператор +
, который будет обрабатывать int, long, float и double или любой другой тип, который реализован оператор +
для T.
Например (это не работает, но передает то, что я хочу сделать):
public class Matrix<T>
{
T[][] values;
...
public static Matrix<T> operator +(Matrix<T> A, Matrix<T> B)
{
values = ...;
for (int row = 0; row < rowCount; ++row)
{
for (int col = 0; col < colCount; ++col)
{
values[row][col] = A.values[row][col] + B.values[row][col];
}
}
}
}
В идеале я хотел бы, чтобы способ ограничить T только теми типами, для которых определен оператор +
, чтобы получить ошибку времени компиляции, но при этом не получится исключение времени выполнения.
Также я хотел бы добавить неявные преобразования затем из Matrix<float>
в Matrix<double>
, но они не могут быть определены в классе Matrix<T>
, в любом случае вокруг этого?
Я знаю, что шаблоны T4 можно использовать для генерации матрицы для каждого типа, но тогда типы должны быть указаны заранее, и я хотел бы, чтобы это работало для любых типов, для которых определен оператор.