Задать вопрос
@1q2w1q2w
sudo make install

Как использовать шаблоны при создании потоков с++11 std::thread?

Есть код:
#include <iostream>
#include <algorithm>
#include <thread>

template<typename T>
T func(T& tid) {
    std::cout << "Thread says: " << tid << std::endl;
}

int main()
{
    std::thread t(func,35);
    t.join();

   return 0;
}


Вываливается ошибка:
main.cpp:17: ошибка: no matching function for call to 'std::thread::thread(<unresolved overloaded function type>, int)'
     std::thread t(func,35);
                          ^

Без шаблона код работает как надо. Судя по тому что написано - компилятор не знает какую версию функции ему вызвать. Друг Google не хочет помогать ... хоть стандарт и был принят 6! лет назад, информации по использованию потоков (с использованием шаблонов) не так много ...

можно конечно и без шаблонов, но хочется знать в чем проблема. Буду благодарен за помощь!)
  • Вопрос задан
  • 627 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Помогите компилятору определить тип функции для инстанцирования
#include <iostream>
#include <algorithm>
#include <thread>

template<typename T>
T func (T& tid) {
	std::cout << "Thread says: " << tid << std::endl;
	return tid;
}

int main ()
{
	unsigned val = 35;
	std::thread t (func<decltype(val)>, val);
	t.join ();

	system ("pause");
	return 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@fdsmerlin
C++ programmer
вот так работает

#include
#include

using namespace std;
template void func(T& id)
{
std::cout << "Thread cout : " << id << std::endl;
}

int main()
{
std::thread t (std::bind(&func,32));
t.join();
return 0;
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы