Ich habe versucht, eine Reihe von Filterfunktionen zu verwenden, um die entsprechende Routine basierend auf einer Zeichenfolge-Eingabe auszuführen. Ich habe versucht, Matcher-Funktionen für häufige Fälle mit Vorlagen zu erstellen, aber ich bekomme einen "Typ ungleich Typ" -Fehler, wenn ich versuche, einen Zeiger auf die spezialisierte Funktion (in einer Struktur, in der realen Anwendung)Wie nehme ich einen Zeiger auf eine Template-Funktion, die auf einen String spezialisiert ist?
Distilled Beispiel aus einer Visual C++ 8 ‚Konsolenanwendung‘
template <const char *C>
const char*
f(void) {
return C;
}
const char* (*g)(void) = f<"hi">;
int _tmain(int argc, _TCHAR* argv[])
{
return g();
}
Dies schlägt mit dem Fehler
Error 1 error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)' c:\files\pointer.cpp 7
(Es ist auch einen Fehler auf dem Hauptrückgabewert hat, aber dass mich hier nicht betreffen.)
Dasselbe Beispiel ist erfolgreich, wenn const char *
durch int ersetzt wird.
Ist Ihnen klar, dass Sie das kompilieren können, indem Sie char gs [] = "hi"; const char * (* g) (void) = f; –
Hat einen Verweis auf die Verwendung benannter Variablen gefunden, aber das würde die prägnante Tabelle zerstören, für die ich vorgehe; besser, die Zeichenfolge zur Tabelle hinzuzufügen und an die Funktion zu übergeben. Eigentlich habe ich nur gepunktet und eine if/else-Kette benutzt. –