Как я могу использовать boost.lambda с boost.thread, чтобы получить возвращаемое значение потока? - PullRequest
2 голосов
/ 12 мая 2011

Я пытаюсь сделать что-то вроде этого:

using namespace boost::lambda;
using boost::thread;

int add(int a, int b) {return a+b;}

int sum, x=2, y=6;
thread adder(var(sum) = add(_1, _2), x, y);
adder.join();
cout << sum;

Я получаю ошибку компиляции:

не может преобразовать параметр 1 из 'boost :: arg' в 'int'

1 Ответ

5 голосов
/ 12 мая 2011

Ты действительно близко!Проблема в том, что вы напрямую вызываете add () с заполнителями лямбды - это не лениво оценивается внутри лямбды, а сразу.

Вот исправленная версия:

using namespace boost::lambda;
using boost::thread;

int sum, x=2, y=6;
thread adder(var(sum) = _1 + _2, x, y);
adder.join();
cout << sum;

если вы действительно хотите использовать функцию add, вы должны использовать bind:

using namespace boost::lambda;
using boost::thread;

int add(int a, int b) {return a+b;}

int sum, x=2, y=6;
thread adder(var(sum) = bind(add, _1, _2), x, y);
adder.join();
cout << sum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...