使用模板的 C++ 11 异步编程
C++ 11 async programming using template
我正在写一个class来实现任务功能。
这是我的代码:
template<typename TType>
class YHMTask
{
public:
YHMTask() {};
std::future<TType> mTask;
};
template<typename T>
YHMTask<T> YHMCreateTask(std::function<T()> func)
{
YHMTask<T> yhmTask;
yhmTask.mTask = std::async(func);
return yhmTask;
}
如果我没有在YHMCreateTask中使用模板,我可以这样使用:
YHMCreateTask([]{return 12;});
但是当我使用模板编写这个函数时。
编译器报告此错误:
error C2672: 'YHMCreateTask': no matching overloaded function found
error C2784: 'YHMTask<TType> YHMCreateTask(std::function<_Type(void)>)': could not deduce template argument for 'std::function<_Type(void)>' from 'main::<lambda_a66b482c6cd6dab7208879904592bde5>'
我必须像这样使用 YHMCreateTask:
int TestFunc()
{
return 11;
}
...
std::function<int(void)> funInt = TestFunc;
auto taskNew = YHMCreateTask(funInt);
我希望YHMCreateTask可以像YHMCreateTask一样使用([]{return 12;});
我该怎么办?
你必须使用类似的东西:
template<typename F>
auto YHMCreateTask(F func)
-> YHMTask<decltype(func())>
{
YHMTask<decltype(func())> yhmTask;
yhmTask.mTask = std::async(func);
return yhmTask;
}
T
不能从lamdba推导出构造std::function
我正在写一个class来实现任务功能。 这是我的代码:
template<typename TType>
class YHMTask
{
public:
YHMTask() {};
std::future<TType> mTask;
};
template<typename T>
YHMTask<T> YHMCreateTask(std::function<T()> func)
{
YHMTask<T> yhmTask;
yhmTask.mTask = std::async(func);
return yhmTask;
}
如果我没有在YHMCreateTask中使用模板,我可以这样使用:
YHMCreateTask([]{return 12;});
但是当我使用模板编写这个函数时。 编译器报告此错误:
error C2672: 'YHMCreateTask': no matching overloaded function found
error C2784: 'YHMTask<TType> YHMCreateTask(std::function<_Type(void)>)': could not deduce template argument for 'std::function<_Type(void)>' from 'main::<lambda_a66b482c6cd6dab7208879904592bde5>'
我必须像这样使用 YHMCreateTask:
int TestFunc()
{
return 11;
}
...
std::function<int(void)> funInt = TestFunc;
auto taskNew = YHMCreateTask(funInt);
我希望YHMCreateTask可以像YHMCreateTask一样使用([]{return 12;}); 我该怎么办?
你必须使用类似的东西:
template<typename F>
auto YHMCreateTask(F func)
-> YHMTask<decltype(func())>
{
YHMTask<decltype(func())> yhmTask;
yhmTask.mTask = std::async(func);
return yhmTask;
}
T
不能从lamdba推导出构造std::function