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

标签 c++ templates c++11 lambda std-function

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

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

关于使用模板的 C++ 11 异步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34379452/

相关文章:

python - 在没有 Django 其余部分的情况下使用 Django 的模板引擎

c++ - 模板元编程。类(class)成员的有条件存在

C++11 make_shared 实例化

c++ - 在 windows 和 mac 上运行的 Opengl cpp 代码?

c++ - 基本类型数组的迭代器类型

c++ - std::future 是否旋转等待?

c++ - 基础/派生模板类类型

c++ - 作用域 std::unique_ptr 转换

c++ - 在 Qt 中如何将单例实例连接到插槽?

c++ - 调用外部函数是否强制从内存加载?