Я ищу и задерживаю вопрос о передаче экземпляров класса и структуры в качестве аргументов для вызова функций с помощью 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 прямо для этого. Функция 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
.