Ich habe eine Template-Klasse, die eine -template- Funktion hat, die einen Zeiger der gleichen Klasse als erstes Argument nimmt, zum Beispiel:Allgemein Template-Argument in Template-Funktion
template<class T>
class Foo{
void f(Foo* foo){}
}
Wenn ich es verwende in meinem Hauptfunktion scheint alles zu funktionieren, bis ich eine andere Vorlage für das Argument verwende.
int main(){
Foo<double> f1;
Foo<double> f2;
f1.f(&f2); //No errors;
Foo<bool> f3;
f1.f(&f3);//Error : No matching function to call to Foo<double>::f(Foo<bool>*&)
}
Offenbar die einzige hier definierte Funktion ist Foo<T>::f(Foo<T>*)
Gibt es eine Möglichkeit, f
definieren kann, die eine „generische“ Vorlage Foo
Zeiger so nimmt ich es mit jeder anderen Art verwenden kann?
ok und wenn ich einen Zeiger auf ein anderes Objekt 'foo' in meiner Klasse haben wollen, die nicht vom Typ 'T' ist? – Elirovi
@elirovi Verwenden Sie eine Basisklasse, void, any oder do not. Sie haben ein X/Y-Problem. – Yakk
@Elirovi: Das ist eine separate Frage. Wird dieser Zeiger eine Membervariable sein? In diesem Fall muss Foo von FooBase abgeleitet werden, und der Zeiger ist auf FooBase. Ist es eine lokale Variable? In diesem Fall müssen Sie es zu einem Zeiger machen, egal auf welche Art von Foo Sie zeigen. –