Le type de retour de mem_fn
et bind
est non spécifié. Cela signifie qu'en fonction des arguments, un type d'objet différent est renvoyé, et que la norme ne prescrit pas les détails sur la façon dont cette fonctionnalité doit être implémentée.
Si vous voulez savoir quel type est dans un cas particulier avec une implémentation de bibliothèque particulière (pour un intérêt théorique, j'espère), vous pouvez toujours provoquer une erreur et obtenir le type du message d'erreur. E.g:
#include <functional>
struct X
{
double method(float);
};
int x = std::mem_fn(&X::method);
9 Untitled.cpp cannot convert 'std::_Mem_fn<double (X::*)(float)>' to 'int' in initialization
Dans ce cas, notez que le nom du type est réservé à un usage interne. Dans votre code, vous ne devez rien utiliser avec un caractère de soulignement (et une lettre majuscule).
En C++ 0x, je suppose que le type de retour serait auto
:)
auto fun = std::mem_fn(&ClassA::method);
Je suis en train d'utiliser 'std :: tr1 :: fonction = amusant std :: tr1 :: mem_fn (& ClassA :: méthode);' mais il ne Compiler, qu'est-ce qui ne va pas? –
Tarantula
@Tarantula: L'objet appelable renvoyé par 'mem_fn' prend une référence, pas un pointeur. Voir la réponse mise à jour. –
Ca ne marche toujours pas, mon prototype pour Func est: virtual void Func (argument MyType *) = 0; – Tarantula