Tenir compte une classe de modèle comme:C++ déduction de « pointeur non de type à la fonction » modèle de classe paramètres
template<typename ReturnType, ReturnType Fn()>
class Proxy
{
void run()
{
ReturnType ret = Fn();
// ... do something ...
}
};
// and a functions
int fn1() { return 5; }
float fn2() { return 5; }
Cela peut être instancié en utilisant:
Proxy<int, &fn1> p1;
Mais déclarant explicitement le type de valeur de retour semble inutile. Ce que je suis en train de réaliser est quelque chose comme:
someProxyInstantation<&fn1> p1;
someProxyInstantation<&fn2> p2;
Malheureusement, je ne suis pas C++ attendre et cela semble être un coin caché de la langue (au moins pour moi).
Si je pouvais obtenir du pointeur vers la fonction de son type - quelque chose comme: std :: tr1 :: result_of < & fn> :: Type // erreur 1 Erreur C2923: « std :: tr1: : result_of »: 'FN1' est pas un argument de type de modèle valide pour le paramètre '_Fty'
l'erreur est logique puisque le paramètre est un "type" du tout
C++ 0x a le decltype (& fn1) mais c'est dans des années.
Une façon de faire cela en C++ 03 (+ tr1)?
Restrictions: - Je ne veux pas passer le foncteur, f1 et f2 doivent rester des fonctions globales qui ont une valeur de retour (ne peut pas le déplacer au paramètre))
Jusqu'à C++ 0x cela devra faire. –