2014-07-05 2 views
-2

내 소프트웨어에는 매우 무거운 프로세스가있는 for 루프가있어서 병렬로 루프를 병렬로 실행하려면 mask_task과 같은 병렬 메소드를 사용하고 싶습니다. 헤더 파일에 작업 처리기 배열을 생성 한 다음 cpp 파일에서 사용해야합니다.
MSDN 정의 make_task은 로컬이며 반환 값은 'auto'이므로 MSDN을 사용할 수 없습니다.클래스의 구성원으로 task_handle 객체를 만드는 방법은 무엇입니까?

auto t1 = make_task([&]ParProcess(Input1,&Output1,&Output2);}); 

을하지만 클래스의 멤버와 포인터에 'T1'을 변환해야합니다

이 내가 현재 성공적으로 사용하고 있습니다 것입니다. 누구든지 나를 도울 수 있습니까?

답변

0

MSDN에서 make_taskFunction 당신이 전달 함수 타입을하는 task_handle<Function> 반환

주면서 명명 할 수없는 종류가 있으므로 두 가지 옵션이 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);}); 
}; 
,
+0

Thanks 'Mankarse'.i는 template_handle을 템플릿 매개 변수로 만들려고하지만 vC++은 많은 오류가 발생합니다. 이 사건에 대한 예를 써주시겠습니까? – user3807383

관련 문제