2012-06-06 2 views
0

У меня проблема с использованием лямбда внутри потока на Boost.Использование boost :: lambda with boost :: thread

Код должен поместить результат функции (строки) в указанный указатель вектора.

std::vector<string> results(size); 
std::vector<boost::thread> threads; 
for( int i = 0; i < size; i++) { 
    threads.push_back(boost::thread(results.at(i) = getAString(x,y,zed))); 
} 

Как бы я мог использовать Boost :: лямбда здесь?

Пожалуйста, не упоминайте использование синтаксиса C++ 11. Система, над которой я вынужден работать, не может поддерживать компилятор, поддерживающий C++ 11. Спасибо!

ответ

0

В вашем случае я задаюсь вопросом, какова будет польза от лямбда-функций. Lambdas на C++ лучше всего подходит для алгоритмов STL на уже заполненных контейнерах. В вашем случае вы хотите заполнить вектор results с помощью лямбда, который не похож на библиотеку. У вас может быть тяжелая битва. http://www.boost.org/doc/libs/1_49_0/doc/html/lambda.html#introduction

Это, как говорится, можно создать лямбды, которые питаются непосредственно rvalues: http://www.boost.org/doc/libs/1_49_0/doc/html/lambda/le_in_details.html#lambda.rvalues_as_actual_arguments Хотя в вашем случае я не уверен, что польза будет над фиксированной функцией, которые могут принимать аргументы, используемые в составляя строку.

Кроме того, я считаю, что функции с резьбой не могут возвращать значения, поэтому ваша потоковая функция должна будет принимать значение results.at(i) в качестве аргумента.

+0

Я закончил переписывание лямбды в расширение класса boost :: thread, которое получило results.at (i), как вы упомянули. Определенно много помогли, спасибо! –

Смежные вопросы