所以,我有一些代码,它应该作为一个单独的线程运行:
template<class Iterator>
void thread_launcher(Iterator start, Iterator fin, size_t sort_type) {
// Blah blah
mixed_sort<less<int>>(start, fin, sort_type);
// blah blah
}
这段代码应该创建这个帖子:
for (size_t sort_type = 2; sort_type!= 7; ++sort_type) {
// blah
t[sort_type] = thread(thread_launcher, copy.begin(), copy.end(), sort_type);
}
,其中t
是thread
的数组。
问题是---当我尝试编译时,我收到此错误:
main.cpp:245:32: error: no matching constructor for initialization of
'std::__1::thread'
...= thread(thread_launcher, copy.begin(), copy.end(), sort_type);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/thread:349:9: note:
candidate template ignored: couldn't infer template argument '_Fp'
thread::thread(_Fp&& __f, _Args&&... __args)
我不明白我做错了什么,虽然这是我第一次使用多线程,更不用说std::thread
了。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
如果没有所有细节,并不完全确定,但令人惊讶的是你将thread_launcher
作为参数传递。这不是一个函数,而是一个函数模板。
请考虑以下事项:
template<typename T>
void foo(T)
{
}
int main()
{
thread t(foo<int>, 3);
return 0;
}
通过我,这构建,但当我将其更改为
thread t(foo, 3);
无法构建。
那么,你可能希望将事情改为
thread(
thread_launcher<decltype(begin(copy))>,
begin(copy),
end(copy),
sort_type)