【发布时间】:2025-12-20 11:55:12
【问题描述】:
我正在尝试将可变计数的回调函数(所有相同的签名)传递给线程函数。我想出了以下代码
using namespace std;
void callback(int i)
{
cout<<"thread "<<i<<" running"<<endl;
}
template<typename ...CallbackType>
void threadProc(int id, CallbackType ...callbackPack)
{
auto callbacks = {callbackPack...};
for(auto callback : callbacks)
{
callback(id);
}
}
int main()
{
thread t(threadProc<void(int)>, 1, callback);
t.join();
return 0;
}
这段代码编译失败
error: no matching function for call to ‘std::thread::thread(, int, void (&)(int))’
thread t(threadProc<void(int)>, 1, callback);
如果threadProc() 没有使用任何参数包,一切都会正常工作。是否有正确的方法来启动具有可变线程功能的线程?
【问题讨论】:
标签: c++ multithreading variadic-templates stdthread