2013-03-06 2 views
0

다음 함수가 있습니다.variadic C++ 11 템플릿 람다 함수의 반환 유형 결정

template<typename T, typename U, typename... Parameters> 
void transform(void (*func)(Parameters...)) 
       { 
        auto lambda_function = [func](T args, U params) 
        { 
        auto combined = std::tuple_cat(args, params); 
        helper(func, combined); 
        }; 
        return lambda_function; 
       } 

나는 가능한 반환에 대한 유형 또는 호출하는 방법을 찾을 수 없습니다 그건, 내가 모두이 호출 할 수 있도록하고 싶습니다;

auto func = transform<std::tuple<char,int>, std::tuple<const char*>>(f); 
func(arg, param); 

주어진 'f', 'arg'및 'param'은 다음과 같습니다.

void f(char arg1, int arg2, const char* arg3); 
std::tuple<char,int> arg = std::tuple<char,int>('C',-3); 
std::tuple<const char*> param = std::tuple<const char*>("PO"); 

누구나 힌트 또는 해결책이 있습니까?

참고 : 코드는에서 찾을 수 있습니다. Linkage

+0

질문 : "인수"와 "매개 변수"의 정의의 차이점을 알고 계십니까? – Xeo

+0

@ Xeo : 네이밍이 나쁘다는 것을 알고 있습니다. 시스템이 작동하면 변경 될 수 있습니다. – Skeen

+0

"나쁜"이라는 이름을 붙이는 것만이 아닙니다. 어떻게 표현하는지 모르면 어떻게 이런 식으로 올바르게 구현할 수 있습니까? "인수"와 "매개 변수"의 올바른 정의를 사용하면이 코드가 전혀 의미가 없습니다 (읽기 : 없음). – Xeo

답변

5

std::function을 반환하거나 명명 된 함수 개체 유형을 만들 수 있습니다.

+0

나는 std :: function을 사용해 보았는데 행운도없이 라이브러리 (표준 라이브러리도 아님)에 의존하지 않을 것입니다. – Skeen

+4

그렇다면 질문이 너무 현지화되어 있습니다. –

+1

Closevote 대포 ... 발사! 표준 라이브러리를 사용하지 않은 이유는 무엇입니까? –