2009-06-26 4 views
1

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.

+0

Ist Ihnen klar, dass Sie das kompilieren können, indem Sie char gs [] = "hi"; const char * (* g) (void) = f ; –

+0

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. –

Antwort

2

Strings als Template-Wert-Parameter sind durch den ISO-Standard verboten.

+0

Zusätzliche Informationen: Vorlagenwertparameter müssen integrierte Typen sein. – rlbond

+0

Das stinkt. Also die Fehlermeldung; ^) –

+1

@Mr. Bond: Aber Zeiger sind ganzzahlige Typen. Das Problem mit Zeichenfolgenliteralen besteht darin, dass zwei äquivalente Zeichenfolgen, die sich in verschiedenen Kompilierungseinheiten befinden, unterschiedliche Adressen haben können, wodurch zwei unterschiedliche Vorlageninstanziierungen erstellt werden. – eduffy

Verwandte Themen