首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用模板的C++ 11异步编程

使用模板的C++ 11异步编程
EN

Stack Overflow用户
提问于 2015-12-20 09:08:13
回答 1查看 316关注 0票数 1

我正在编写一个类来实现任务特性。这是我的代码:

代码语言:javascript
复制
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中使用模板,我可以这样使用它:

代码语言:javascript
复制
YHMCreateTask([]{return 12;});

但是当我用模板编写这个函数的时候。编译器报告此错误:

代码语言:javascript
复制
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:

代码语言:javascript
复制
int TestFunc()
{
    return 11;
}
...
std::function<int(void)> funInt = TestFunc;
auto taskNew = YHMCreateTask(funInt);

我希望YHMCreateTask可以像YHMCreateTask([]{返回12;})一样使用;我应该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-20 09:13:41

你必须使用这样的方法:

代码语言:javascript
复制
template<typename F>
auto YHMCreateTask(F func)
-> YHMTask<decltype(func())>
{
    YHMTask<decltype(func())> yhmTask;
    yhmTask.mTask = std::async(func);
    return yhmTask;
}

不能从lamdba推导出T来构造std::function

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34379452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档