C ++ Matrix Multiplikationstyp Erkennung

n meinem C ++ - Code habe ich eine Matrix-Klasse und einige Operatoren, die geschrieben wurden, um sie zu multiplizieren. Meine Klasse wird als Vorlage verwendet, was bedeutet, dass ich int, float, double ... Matrizen haben kann.

Meine Bedienerüberlastung ist klassisch, denke ich

    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;
  }

In diesem Code gebe ich eine Matrix des gleichen Typs wie der erste Parameter zurück, d. H.Matrix<int> * Matrix<float> = Matrix<int>. Meine Frage ist, wie ich den präzisesten Typ unter den zwei finden kann, die ich gebe, um nicht zu viel Präzision zu verlieren, d. H. Um @ zu habeMatrix<int> * Matrix<float> = Matrix<float>? Gibt es einen Schlauen, der das macht?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage