2012-08-24 2 views
0

Je travaille sur un projet où je dois déterminer si je dois appeler une fonction fournie par l'utilisateur, en fonction de certaines conditions. Le hic est que la fonction fournie peut avoir n'importe quelle signature. Est-il possible de faire ce qui suit en utilisant le standard C++ 11 actuel? (Le code doit être compilé avec C++ visuel 2010):Fonction de modèle de magasin à appeler plus tard

template <what do I put here?> 
void functioncall(std::function<and here> f) 
{ 
    ReturnType returnval = f(arguments); 
} 
+3

Comment pouvez-vous appeler si vous ne le faites pas connaître les 'arguments', et que pourriez-vous faire avec la valeur retournée? –

Répondre

2

Cela est encore possible en C++ 03, il suffit d'utiliser un paramètre sans restriction:

template<class F> 
void call(F f) // accept any callable entity 
{ 
    ReturnType retval = f(arguments); 
} 
+0

Je ne pense pas que votre solution s'applique ici parce que l'entité appelable peut avoir n'importe quelle signature. Par exemple, je dois pouvoir appeler: int f1 (int y, int z) {return y + z;} char * f2 (int x) {return nullptr;} appel (f1); appel (f2); ceux-ci doivent tous deux fonctionner. Est-ce que quelque chose me manque dans votre commentaire? – razvanp

+2

@razvanp: Euh ... comment une entité appelable * non restreinte * n'autorise-t-elle pas cela? Passez ce que vous voulez et appelez-le comme bon vous semble. – Xeo

+0

Pouvez-vous me donner un exemple, s'il vous plaît? C'est la première fois que je tombe sur ce terme. Merci beaucoup. – razvanp

Questions connexes