Концепция переопределения метода в Thread C ++ - PullRequest
0 голосов
/ 09 июля 2020

В моем коде есть два метода work () и work (var), я хочу передать эту функцию в поток, всякий раз, когда я передаю один из этих методов, я получаю сообщение об ошибке «Нет подходящего конструктора для инициализации std :: thread "

Мой код:

void work(){ // something do} 
void work(int var){// something do}
int main(){

   std::thread myThread_1(work,34); // this line of code give me error
   
  myThread_1.join();
  return 0;
}

Как я могу решить эту проблему, ребята? пожалуйста, помогите мне

1 Ответ

2 голосов
/ 09 июля 2020

Вы не можете передавать перегруженные функции в качестве параметров. Вам нужно либо:

Явно привести к желаемой перегрузке:

std::thread myThread_1(static_cast<void (*)(int)>(work), 34);

или использовать лямбда:

std::thread myThread_1([](int var) { work(var); }, 34);
// or better yet:
std::thread myThread_1([] { work(34); });
...