Я создаю библиотеку в C ++ для работы с матрицами любого типа, и я хотел бы иметь возможность выполнять базовые операции между двумя матрицами различного типа.
Допустим, у меня есть матрица A с типом int и матрица B с двойным типом.
Когда мы добавляем эти две матрицы, мы должны получить матрицу C типа, которая получается из: int + double (в этом случае предпочтительным является double, чтобы избежать потери данных).
Я использую шаблон с двумя типами: T1 и T2 для обработки разных типов моих матриц, и я попытался использовать typeid, чтобы получить тип возвращаемой матрицы. Но поскольку typeid не работает с T1 и T2 (если я правильно понял), я застрял.
template<class T1, class T2> Matrix<T1> & operator+(Matrix<T1> Matrix1, Matrix<T2> Matrix2) {
if(Matrix1.GetCol() != Matrix2.GetCol() || Matrix1.GetRows() !=
Matrix2.GetRows()){
throw(EXC_DifferentDimensions);
}
Matrix<T3> * result = new Matrix<T3>(Matrix1.GetRows(), Matrix1.GetCol());
for(unsigned int iRow = 0; iRow < Matrix1.GetRows(); iRow++){
for(unsigned int iCol = 0; iCol < Matrix1.GetCol(); iCol++){
result->SetElement(Matrix1.GetElement(iRow, iCol) + Matrix2.GetElement(iRow, iCol), iRow, iCol);
}
}
return *result;
}
Можно ли заставить его работать или я застрял с залипанием определенного типа для возвращаемой матрицы?