Я думаю, что было бы весьма необычно предоставить «конструктор преобразования»:
template <class U>
Matrix2D<T>(const Matrix2D<U>&)
Это должно автоматически заставить все работать, например
Matrix2D<double> a;
Matrix2D<int> b;
//implicitly uses the conversion constructor to create a temporary Matrix2D<double> from b
a += b;
Даже если создание временного объекта будет слишком дорогим, вы можете определить все операторы, чтобы операнды могли представлять собой разные типы матриц.
Операторы преобразования, однако, являются тупиковыми. Они просто мутят воду.
P.S Я также посмотрел ссылки на ваш проект. Какова цель переизобретения связанного списка, особенно если его интерфейс полностью несовместим с SC ++ L? (Даже древняя библиотека, такая как wxWidgets, предоставляла альтернативный и предпочтительный STL-совместимый интерфейс для их wxString.)
Редактировать: Что касается проблемы вашего оператора преобразования, с каким компилятором он не компилируется?
template <class T>
struct X
{
int n;
operator T() { return n; }
operator T*() { return &n; }
};
int main()
{
X<int> x = {42};
int a = x;
int* b = x;
}
Обратите внимание, что это может рассматриваться как злоупотребление перегрузкой операторов, которое определенно не сделает ваш код чище.