Rodzaj powrót mem_fn
i bind
jest nieokreślony. Oznacza to, że w zależności od argumentów zwracany jest inny rodzaj obiektu, a standard nie określa szczegółów, jak ta funkcja musi zostać zaimplementowana.
Jeśli chcesz dowiedzieć się, jaki typ jest w konkretnym przypadku z konkretną implementacją biblioteki (teoretycznie, mam nadzieję), zawsze możesz spowodować błąd i uzyskać typ z komunikatu o błędzie. Np .:
#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
W tym przypadku należy pamiętać, że nazwa typu jest zarezerwowana do użytku wewnętrznego. W twoim kodzie nie powinieneś używać niczego z wiodącym podkreśleniem (i wielką literą).
w C++ 0x, przypuszczam typ zwracany byłby auto
:)
auto fun = std::mem_fn(&ClassA::method);
Próbuję użyć 'std :: tr1 :: funkcję zabawa = std :: tr1 :: mem_fn (& ClassA :: metoda);' ale nie robi kompilować, co jest nie tak? –
Tarantula
@ Tarantula: Obiekt wywoływalny zwracany przez 'mem_fn' pobiera odwołanie, a nie wskaźnik. Zobacz zaktualizowaną odpowiedź. –
Nadal nie działa, moim prototypem dla Func jest: virtual void Func (MyType * argument) = 0; – Tarantula