请考虑我从another of my questions获得的代码:
#include <thread>
using namespace std;
class CObject {};
void MyThreadFunc(CObject&) {}
void MyThreadFunc(CObject&&){}
template<typename FunctionType, typename ...Args>
void StartDetachedThread(FunctionType func, Args&&... args)
{
thread([&]()
{
func(forward<Args>(args)...);
}).detach();
}
int main()
{
CObject object;
StartDetachedThread<void(CObject&)>(MyThreadFunc, std::ref(object));
CObject object2;
StartDetachedThread<void(CObject&&)>(MyThreadFunc, std::move(object2));
return 0;
}
对StartDetachedThread
的调用指定了模板参数,以便如果我将r值引用传递给它,它会调用期望r值引用的MyThreadFunc
版本;与普通参考版本相同。
很简单,当我只指定一个模板参数类型(我希望我的线程运行的函数的类型)到一个期望两个的函数时,我不明白它是如何工作的 - 有人可以澄清一下吗?
答案 0 :(得分:0)
好的,没有人想发一个答案,所以我会回答这个问题。如上面的注释中所述,编译器将通过模板参数推导推导出参数Args
的类型;没有必要明确声明所有模板参数。