2015-10-22 2 views
0

Я только начинаю изучать ppl в Visual Studio, и я начал изучать задачи. Пока все хорошо, и, например, я понимаю основы. Но как я могу создать задачу, которая получает аргумент? То есть, довольно просто создать задачу, которая не принимает аргументов, но тот, который принимает какие-либо аргументы, для меня совершенно не очевиден.
Задача создания, где задача не принимает никаких аргументов легко:Передача параметра заданию в ppl

task<string> aTask{ create_task([]() { 
     return string{}; 
      } 
      ) 
      }; 

Не могу передать какие-либо аргументы к нему. Как бы я это сделал. Если я пытаюсь передать аргументы в лямбда, я получаю ошибку компиляции.

+0

Что точная ошибка вы получаете? Трудно сказать ничего определенного без полной выборки. – Tony

ответ

0

Параметр, который вы передаете в create_task, может быть лямбда-функцией, как вы демонстрируете в своем коде.

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

Вот несколько разновидностей лямбда:

// basic lambda 
auto func = []() { cout << "A basic lambda" ; } ; 

// lambda where variable is passed by value 
auto func = [](int n) { cout << n << " "; } 

// lambda where variable is passed by refrence 
auto func = [](int& n) { cout << n << " "; } 

// lambda with capture list 
int x = 4, y = 6; 
auto func = [x, y](int n) { return x < n && n < y; } 

// lambda that explicitly returns an int type 
auto func = []() -> int { return 42; } 
+2

Спасибо за ваш ответ, но это действительно не отвечает на вопрос OQ. Я знаю, как передавать аргументы в лямбда, но если я попытаюсь сделать это из задачи, я получаю сообщения об ошибках. Так что это не так просто, как может показаться. – Artur

-1

Эта ссылка дает хороший пример передачи строки к задаче.

https://msdn.microsoft.com/en-us/library/dd492427.aspx

Пример кода

return create_task([s] 
{ 
    // Print the current value. 
    wcout << L"Current value: " << *s << endl; 
    // Assign to a new value. 
    *s = L"Value 2"; 
}).then([s] 
{ 
    // Print the current value. 
    wcout << L"Current value: " << *s << endl; 
    // Assign to a new value and return the string. 
    *s = L"Value 3"; 
    return *s; 
}); 
Смежные вопросы