den folgenden Ausschnitt Angenommen:Geben nullptr einen Typ für Vorlage Abzug
template <class T>
void fct(T* a, T* b){
// do something
}
A a;
fct(&a, nullptr); // Problem here!
Diese Mühe macht, da die Aufrufargumente vom Typ sind A*
und nullptr_t
und so kann der Compiler nicht Template-Parameter T
ableiten.
Im Allgemeinen kann ich mehrere Ideen vorstellen, wie dieses Problem zu lösen:
A* b = nullptr
definieren und verwendenfct(&a, b)
- Definieren Sie eine Überlastung mit einem Argument für
fct
für dennullptr
Fall - Verwenden
fct(&a, static_cast<A*>(nullptr))
Oder gibt es eine sauberere Lösung, li ke die Schaffung eines so etwas wie ein "typisiertes nullptr"?
Wie könnte Ihr getippter "nullptr" von "static_cast (nullptr)" abweichen? – Petr
Ihre zweite Alternative sieht wie die beste Wette aus ... Überladung (Template-Spezialisierung) – basav
Sie bereits in Frage beantwortet ... 1. und 3. Alternativen sind mehr oder weniger die gleichen: Sie brauchen ein T * und nullptr ist nicht so Sie verbieten ' fct (& a, nullptr) ', und 2. verwendet eine explizite Überladung, um es zuzulassen. Ich kann mir keine andere Antwort vorstellen ... –