J'essayais d'utiliser un ensemble de fonctions de filtrage pour exécuter la routine appropriée, basée sur une entrée de chaîne. J'ai essayé de créer des fonctions de matcher pour des cas courants en utilisant des modèles, mais j'obtiens une erreur "type différent du type" quand j'essaie de stocker un pointeur sur la fonction spécialisée (dans une structure, dans l'application réelle)Comment faire un pointeur vers une fonction template spécialisée sur une chaîne?
Distillée par exemple à partir d'une 'application console' Visual C++ 8
template <const char *C>
const char*
f(void) {
return C;
}
const char* (*g)(void) = f<"hi">;
int _tmain(int argc, _TCHAR* argv[])
{
return g();
}
Cela échoue avec l'erreur
Error 1 error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)' c:\files\pointer.cpp 7
(Il a également une erreur sur la valeur principale de retour, mais cela ne me concerne pas ici.
Le même exemple réussit si const char *
est remplacé par int.
Savez-vous que vous pouvez le compiler en faisant des char gs [] = "hi"; const char * (* g) (vide) = f; –
J'ai trouvé une référence à l'utilisation de variables nommées, mais cela détruirait la table concise que je vais utiliser; mieux vaut ajouter la chaîne à la table et la passer à la fonction. En fait, j'ai juste utilisé une chaîne if/else. –