Question

J'essayais d'utiliser un ensemble de fonctions de filtrage pour exécuter la routine appropriée, en fonction d'une entrée de chaîne. J'ai essayé de créer des fonctions de correction pour les cas courants à l'aide de modèles, mais le type & "N'est pas égal à" & "; erreur lorsque j'essaie de stocker un pointeur sur la fonction spécialisée (dans une structure, dans l'application réelle)

Exemple distillé à 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 y a aussi une erreur sur la valeur de retour principale, mais cela ne me concerne pas ici.)

Le même exemple succède si const char * est remplacé par int.

Était-ce utile?

La solution

Les chaînes en tant que paramètres de valeur modèle sont interdites par la norme ISO.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top