Wie man einen Zeiger auf eine Template-Funktion auf einer Schnur spezialisiert nehmen?
-
20-08-2019 - |
Frage
Ich habe versucht, eine Reihe von Filterfunktionen verwenden Sie die entsprechende Routine ausgeführt werden, basierend auf einem String-Eingang. Ich habe versucht, Matcher Funktionen für allgemeine Fälle zum Erstellen von Vorlagen verwenden, aber ich erhalte eine „Typen nicht gleich geben“ Fehler, wenn ich versuche, einen Zeiger auf die spezielle Funktion zu speichern (in einer Struktur, in der realen Anwendung)
Destilliertes Beispiel aus einem 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 hat auch einen Fehler auf dem Haupt-Rückgabewert, aber das macht mich hier nicht beschäftigen.)
Das gleiche Beispiel succedes wenn const char *
mit int ersetzt wird.
Lösung
Strings als Template-Wert Parameter, die von der ISO-Norm verboten sind.