comment utiliser std::function point d'un modèle de fonction
#include <functional>
int func(int x, int y)
{
return x+y;
}
int main()
{
typedef std::function<int(int, int)> Funcp;
Funcp funcp = func;
return 0;
}
Mais est-il possible de trouver une fonction de modèle?
#include <functional>
template<class T>
T func(T x, T y)
{
return x+y;
}
int main()
{
typedef std::function<?(?, ?)> Funcp;
Funcp funcp = func;
return 0;
}
OriginalL'auteur hidayat | 2011-03-01
Vous devez vous connecter pour publier un commentaire.
Pas. Une fonction de modèle, c'est exactement cela, un modèle. Ce n'est pas une fonction réelle. Vous pouvez pointer une std::function à une instanciation de la fonction de modèle, par exemple
func<int,int>
C'est une bonne réponse, mais c'est un peu trompeur. Vous dites "non", puis allez à expliquer pourquoi la réponse est " oui, si vous l'instancier.'
OriginalL'auteur Erik
Il n'y a pas une telle chose comme un fonction de modèle en C++ — ce que les gens mentionnent en passant que le "modèle de fonctionnement", sont en fait les modèles de fonction : les modèles qui définissent les fonctions.
En tant que tel,
func
dans votre deuxième exemple ci-dessus n'est pas une fonction, c'est une (fonction) de modèle, et il ne peut pas être utilisée de la même façon qu'une fonction peut. En particulier,std::function
s'attend à être doté d'une fonction.Comment vous pouvez contourner cela dépend de ce que vous essayez d'atteindre. Si vous êtes à essayer de faire le code qui utilise la fonction de travail avec n'importe quel type, vous pouvez simplement placer ce code dans une fonction ou d'une classe de modèle:
Ce que vous ne serez pas en mesure de le faire, cependant, est d'utiliser la liaison tardive avec universal type quantificateurs ("peut être appliqué à tout type"), parce que "peut être appliqué à tout type" est nécessairement résolu à la compilation en C++. C'est juste comment ça roule.
OriginalL'auteur Victor Nicollet
Est-ce que vous souhaitez?
OriginalL'auteur TonyK
Comme Erik points, ce n'est pas possible directement. Pour obtenir l'effet que vous avez probablement désir, vous devez faire le code qui utilise le pointeur de modèle.
OriginalL'auteur Björn Pollex