In meinem C++ Code habe ich eine Matrix-Klasse, und einige Operatoren geschrieben, um sie zu multiplizieren. Meine Klasse ist Templates, was bedeutet, dass ich int, float, double ... Matrizen haben kann.C++ Matrix Multiplikation Typ Erkennung
Mein Betreiber Überlastung des Klassikers I
erratentemplate <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 kehre ich eine Matrix des gleichen Typs als der erste Parameter d Matrix<int> * Matrix<float> = Matrix<int>
. Meine Frage ist, wie kann ich den am meisten präzisierten Typ unter den beiden erkennen, die ich gebe, um nicht zu viel Präzision zu verlieren, d. H. Matrix<int> * Matrix<float> = Matrix<float>
? Ist es klug, es zu tun?
können Sie Konvertierungen liefern (zB. Matrix 'zu' Matrix ') und erlauben nur den gleichen Typ für die anderen Operationen –
user463035818
Sind Sie sicher, das Objekt auf ** Heap ** ist was du was? –
Ich möchte eine Menge Referenz verwenden, um Speicherkopien zu vermeiden. Gibt es einen anderen Weg, es zu tun? – baptiste