1) Следующая строка не является допустимым синтаксисом C ++:
mat(m,std::vector<T>(n));
Вы должны инициализировать mat
объект-член в списке инициализации конструктора, например так (при условии, что самый внешний initializer_list
не пуст)):
Matrix(std::initializer_list<std::initializer_list<T>> lst) : mat(lst.size(), std::vector<T>(begin(lst)->size()))
2) Что касается предоставленного вами operator +
:
template<typename T,typename X,typename Y>
MatrixSum<T,X,Y>
operator+(X const& x, Y const& y)
{
return MatrixSum<T,X,Y>(x,y);
}
Обратите внимание, что параметр шаблона T
не выводится, поэтому компилятор не может его выяснитьи, следовательно, не может использовать этот оператор.Единственный способ назвать это было бы так:
matrix1.operator +<some_type>(matrix2);
... что, вероятно, не то, что вам нужно.
Правильный способ - попытаться вычислить T
ввремя компиляции, основанное на типах X
и Y
, с использованием некоторого метапрограммирования.