В домашней странице Bjarne Stroustrup (С++ 11 FAQ):
struct X { int foo(int); };
std::function<int(X*, int)> f;
f = &X::foo; //pointer to member
X x;
int v = f(&x, 5); //call X::foo() for x with 5
Как это работает? Как std:: function вызывает функцию-член foo?
Параметр шаблона int(X*, int)
, is &X::foo
преобразован из указателя функции-члена в указатель функции нечлена?!
(int(*)(X*, int))&X::foo //casting (int(X::*)(int) to (int(*)(X*, int))
Чтобы уточнить: я знаю, что нам не нужно указывать какой-либо указатель на использование функции std::, но я не знаю, как внутренние функции std:: function обрабатывают эту несовместимость между указателем на функцию-член и -member function pointer. Я не знаю, как стандарт позволяет нам реализовать что-то вроде std:: function!