在我的软件中,我有一个for循环,它有一个非常繁重的过程,所以我想使用mask_task
等并行方法来并行运行这个for循环。
我需要在头文件中创建一个任务处理程序数组,然后在cpp文件中使用它们
make_task
的MSDN定义是本地的,返回值为' auto'所以我不能使用MSDN。
这就是我目前成功使用的内容:
auto t1 = make_task([&]ParProcess(Input1,&Output1,&Output2);});
但我需要转换' t1'到类的成员和指针。 愿有人帮帮我吗?
答案 0 :(得分:0)
从MSDN,make_task
返回task_handle<Function>
,其中Function
是您传递的函数类型。
Lambdas具有无法命名的类型,因此您的两个选项是将lambda包装在std::function
中:
struct ClassContainingTask {
ClassContainingTask(int Input1, int *Output1, int *Output2) :
t1(std::function<void()>([&]{ParProcess(Input1,Output1,Output2);}))
{}
task_handle<std::function(void())> t1;
};
或将您的课作为模板,并使task_handle
成为模板参数:
template<typename F>
struct ClassContainingTask {
ClassContainingTask(F &&f) : t1(std::forward<F>(f))
{}
task_handle<typename std::decay<F>::type> t1;
};
template<typename F>
ClassContainingTask<F>
make_ClassContainingTask_helper(F &&f) {
return ClassContainingTask<F>(std::forward<F>(f));
}
//Call this to create the ClassContainingTask instantiated
//with the appropriate template parameter
auto make_ClassContainingTask = [](int Input1, int *Output1, int *Output2) {
return make_ClassContainingTask_helper([&]{ParProcess(Input1,Output1,Output2);});
};