【发布时间】:2016-01-30 08:25:42
【问题描述】:
我不知道如何将带有可变模板参数的成员函数传递给std::thread 构造函数。我有一个接收函数及其参数的方法,需要将它们传递给在新线程中调用并在那里调用传递函数的其他方法。
这是简化版:
class Test
{
public:
template<typename Function, typename... Args>
void Run(Function&& f, Args&&... args)
{
std::thread t(&Test::Operation, this, f, args...); // how???
t.detach();
}
template<typename Function, typename... Args>
void Operation(Function&& f, Args&&... args)
{
f(args...);
}
};
Test test;
test.Run([](const std::string& msg) { std::cout << msg; }, "Hi!");
以这种方式传递参数有问题,我收到以下错误:'std::thread::thread':没有重载函数需要 4 个参数。我该怎么做?
【问题讨论】:
-
为什么不直接使用函数重载?
-
@vonbrand 我需要在类似的场景中执行大量的各种功能,所以我想最小化代码
标签: c++ multithreading c++11