У меня есть класс, который хранит функцию обратного вызова, а другой, на котором имеет функцию-член, что я хочу, чтобы установить в качестве обратного вызова, например:Как установить функцию-член как обратный вызов с использованием зЬй :: BIND
using namespace std::placeholders;
class A {
typedef std::function<void(int)> Callback;
Callback callback;
A() {}
A(Callback f) : callback(f);
do_something(int x) { callback(x); }
}
class B {
A a;
void function(int x) { printf("%d", x); }
B()
{
a = A(std::bind(&B::function, this, _1));
}
Когда я это делаю и пытаюсь вызвать функцию обратного вызова, я получаю неверную ошибку вызова функции на MSVC. Что я здесь делаю неправильно?
EDIT 01/21/2014
Как axalo отметил, что нет никакой ошибки в этом коде (кроме некоторых опечаток). Он компилируется. Но я делаю некоторые тесты, и я получаю странное поведение: Когда я использую «привязку» с «этим» указателем на застройщик, т.е.
B() { a = A(std::bind(&B::function, this, _1)); }
«это» указатель отличается от фактический указатель на экземпляр класса, в то время как, если я делаю это:
void helper() = { a = A(std::bind(&B::function, this, _1)); }
B() { }
И вызов помощника() из экземпляра, я получаю правильный «это» указатель. Правильно ли это поведение? Я не должен доверять значению «этого» указателя в конструкторе?
Спасибо.
Вы правы ... на самом деле это были опечатки ... Я упрощал, потому что исходный код был слишком сложным. Я только что составил код выше. Думаю, мне нужно продолжать искать оригинальный код, я должен что-то игнорировать. Большое спасибо. –