Насколько я знаю, указатель функции-члена может быть назначен только указателю на тип функции-члена, и преобразование в любой другой, кроме этого, будет нарушать стандарт, верно?
И при вызове std::bind(&T::memberFunc, this)
он должен возвращать зависимый тип, который зависит от T
. (в стандартной версии VC++ это шаблон класса с именем _Binder
).
Таким образом, возникает вопрос, почему один std::funcion
может охватывать все типы _Binder
(версия VC++).
class A
{
public:
void func(){}
};
class B
{
public:
void func(){}
};
std::function<void(void)> f[2];
A a;
B b;
f[0] = std::bind(&A::func, &a);
f[1] = std::bind(&B::func, &b);
И я не могу представить, какой тип члена std::funcion, в котором хранится функция, будет похож, если я не ошибаюсь с самого начала.
Этот вопрос касается только функции-члена, которую необходимо вызывать с ее экземпляром.
Но мой вопрос о том, почему один тип std::function
может содержать все типы T
.
void f0() { return a.func(); }
иvoid f1() { return b.func(); }
? - person Jean-Baptiste Yunès   schedule 20.03.2018return a.func();
? Что это?@Jean-BaptisteYunès - person Francis   schedule 20.03.2018void f0() { a.func(); }
- person Jean-Baptiste Yunès   schedule 20.03.2018