Ich versuche, meinen Kopf herum zu wickeln, warum ein Problem gibt es versucht, dieseTemplated Klasse Parameter Überlastung
#include <iostream>
template <unsigned int ROWS,unsigned int COLS>
class Matrix{
public:
double dotProd(const Matrix<1,COLS>& other){
static_assert(ROWS==1,"dotProd only valid for two vectors");
return COLS;//place holder for dot product with row vectors
}
double dotProd(const Matrix<ROWS,1>& other){
static_assert(COLS==1,"dotProd only valid for two vectors");
return ROWS;//place holder for dot product with col vectors
}
};
int main(){
Matrix<1,32> bob;
Matrix<1,32> fred;
std::cout<<bob.dotProd(fred)<<std::endl;
return 0;
}
zu kompilieren, die mir diesen Fehler geben:
overloadedTemplateMethod2.cpp: In instantiation of ‘class Matrix<1u, 1u>’:
overloadedTemplateMethod2.cpp:17:32: required from here
overloadedTemplateMethod2.cpp:9:16: error: ‘double Matrix<ROWS,COLS>::dotProd(const Matrix<ROWS, 1u>&) [with unsigned int ROWS = 1u; unsigned int COLS = 1u]’ cannot be overloaded
double dotProd(const Matrix<ROWS,1>& other){
^
overloadedTemplateMethod2.cpp:5:16: error: with ‘double Matrix<ROWS, COLS>::dotProd(const Matrix<1u, COLS>&) [with unsigned int ROWS = 1u; unsigned int COLS = 1u]’
double dotProd(const Matrix<1,COLS>& other){
^
Ich verstehe, dass die Vorlage Ausfüllen der Parameter würde dazu führen, dass die zweite Funktion auf double dotProd(const Matrix<1,1>& other)
auflösen, aber ich würde denken, dass der andere zu double dotProd(const Matrix<1,32>& other)
, nicht Matrix<1,1>
wieder auflösen sollte.
was geht hier vor?
Also, was Sie sagen, ist, wenn die Argumente der zweiten Funktion zu Matrix <1,1> aufgelöst werden, muss diese Klasse generiert werden, und da es schlecht mit diesen Argumenten gebildet wird, verursacht das Problem? –
@Austin_anderson Yep. Ich würde sagen, dass mehr oder weniger was passiert. Die Fehlermeldung erwähnt einen Typ "Matrix <1,1>" zusammen mit dem Fehler tatsächlich. – skypjack
cool Ich habe nur versucht, die Fehlermeldung zu entmystifizieren und das macht es wirklich schön, ich denke, mein nächster Schritt wäre, diese Funktionsvorlagen zu machen und static_assert die Parameter sind gleich dem entsprechenden Klassenparameter –