Detecção de tipo de multiplicação de matriz C ++
No meu código C ++, tenho uma classe Matrix e alguns operadores escritos para multiplicá-los. Minha turma é modelada, o que significa que posso ter matrizes int, float, double ...
Minha sobrecarga de operador é clássica, eu acho
template <typename T, typename U>
Matrix<T>& operator*(const Matrix<T>& a, const Matrix<U>& b)
{
assert(a.rows() == b.cols() && "You have to multiply a MxN matrix with a NxP one to get a MxP matrix\n");
Matrix<T> *c = new Matrix<T>(a.rows(), b.cols());
for (int ci=0 ; ci<c->rows() ; ++ci)
{
for (int cj=0 ; cj<c->cols() ; ++cj)
{
c->at(ci,cj)=0;
for (int k=0 ; k<a.cols() ; ++k)
{
c->at(ci,cj) += (T)(a.at(ci,k)*b.at(k,cj));
}
}
}
return *c;
}
Neste código, retorno uma matriz do mesmo tipo que o primeiro parâmetro, ou seja,Matrix<int> * Matrix<float> = Matrix<int>
. Minha pergunta é: como posso detectar o tipo mais preciso entre os dois que dou para não perder muita precisão, ou seja, terMatrix<int> * Matrix<float> = Matrix<float>
? Existe uma maneira inteligente de fazer isso?