boost::bind thread для указателя на функцию с аргументом

У меня есть функция foo(myclass* ob), и я пытаюсь создать потребительский поток, используя Consumer_thread(boost::bind(&foo)(&ob))

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

class myclass{
// stuff
}

void foo(myclass* ob){
// stuff
}

int main(){
myclass* ob = new myclass();
boost::thread consumer_thread()boost::bind(&foo)(&ob));
// stuff
}

Что я делаю неправильно? Может ли кто-нибудь здесь рассказать о boost::bind и о том, как передавать указатели функций с аргументами функций?

Заранее спасибо!


person ND_27    schedule 30.09.2013    source источник


Ответы (2)


В вашем примере кода есть ошибки. Это фиксированная версия, в которой возвращаемое значение вызова bind используется как единственный параметр в конструкторе boost::thread:

boost::thread consumer_thread(boost::bind(foo, ob));

Но вы можете вообще пропустить вызов boost::bind, передав функцию и ее параметры конструктору:

boost::thread consumer_thread(foo, ob);
person juanchopanza    schedule 30.09.2013
comment
Спасибо .. У меня есть некоторая неясность в отношении того, когда следует или не следует использовать привязку, хотя я читал об этом. - person ND_27; 30.09.2013

Это должно быть bind(foo, ob).

Однако я почти уверен, что boost::thread имеет тот же интерфейс, что и std::thread, и в этом случае вам вообще не нужен bind:

boost::thread consumer_thread(foo, ob);
person Mike Seymour    schedule 30.09.2013