Как передать экземпляры класса / структуры в качестве аргументов для обратных вызовов, используя boost :: bind?

0

Я ищу и задерживаю вопрос о передаче экземпляров класса и структуры в качестве аргументов для вызова функций с помощью boost::bind

До сих пор обратный вызов с использованием этого метода работает нормально. Я хочу использовать приведенные ниже фрагменты кода

class A
{
  public :
  static int i = 1;

};

Тем не менее, я хочу передать этот экземпляр класса этому указателю функции обратного вызова, описанному ниже

void Init(void (*Notify)(A *a, int, int,int),int arr[],
          A *a, value,int left,int right)
{

}
Теги:
boost-bind

1 ответ

0

Вы не можете использовать Boost Bind прямо для этого. Функция Init требует указателя на свободную функцию, имеющую эту подпись:

void (*)(A *a, int, int, int)

Таким образом, вы можете реализовать следующее:

void foo(A *a, int x, int y, int z)
{
    a->whatever(x, y, z);
}

Затем вы вызываете Init(foo,...).

Но это должна быть свободная функция; несколько эквивалентное выражение Boost Bind не будет работать:

boost::bind(&A::whatever, _1, _2, _3)

Почему это не будет работать? Поскольку Init требует бесплатной функции, а не, например, boost::function<void(A*,int,int,int>)> которая будет поддерживать boost::bind.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню