@vipermagi
Вечный ученик.

Как в аргумент потоковой функции передать функциональный объект по ссылке?

Есть две функции:
void handler1(std::string& s) {}
и
void thread1(std::function<void(std::string&)>& f) {}


Я делаю с ними это:
auto f = std::bind(handler1, _1);
std::thread t(&thread1, std::ref(f)); //<-- Ошибка :(


Компилятор выдаёт ошибку. А если не по ссылке передавать, то ошибки не выдаёт.

При передаче таким же образом переменных, всё работает, а вот с функциональным объектом почему-то нет.

В чём загвоздка и как мне свершить задуманное?
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
@MiiNiPaa
Функция треда принимает ссылку на какой-то класс. Вы пытаетесь всунуть ссылку на совершенно другой класс. Ошибка вполне логична. Попробуйте давать тот тип, который ожидается:
std::function<void(std::string&)> f = std::bind(handler1, _1);
//или тупо
std::function<void(std::string&)> f = handler1;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы