2012-02-03 2 views
2

그래서 MPL을 향상시키는 것이 새로운데, 표준 유형과 함께 사용하는 방법을 모르겠습니다. 이 속으로변형 튜플 유형

std::tuple<T0, T1, ..., TN> 

:

나는 이런 종류의 변환한다 metafunction 원하는

std::tuple< 
    std::function<T0(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>, 
    std::function<T1(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>, 
    ..., 
    std::function<TN(...)> 
> 

을 그리고 이것은 transform와 함께 할 수있는 것 같아,하지만 난 튜플 형을 갖고 싶어 , 유형의 벡터가 아닙니다. (실제로 MPL을 사용할 필요는 없습니다. 그러나 더 짧을 것이라고 생각하십니까?)

배경 : 현재 완전히 일반적인 유형을 사용하고 잘못 사용한 경우 모든 지옥에 의존하지만, TupleOfFunctions을 계산하고 싶습니다. 적절한 오류가 발생합니다.

template<class TupleOfValues, class TupleOfFunctions> 
void f(TupleOfValues v, TupleOfFunctions fun) 

답변

4

다음은 어때요?

template<typename T> struct transform; 
template<typename ...T> 
struct transform<std::tuple<T...>> { 
    typedef std::tuple<std::function<T(std::tuple<T...>, std::tuple<T...>)>...> type; 
}; 
이 컴파일되지 않지만, 올바른`표준 : function` 구문을 사용하여 양식 작동
+3

:'표준 : : 튜플 <표준 : 기능 , 표준 : : 튜플 )> ...>'. – kennytm

+0

와우, 나는 '...'이 너무 강력하고 수동으로 풀어 주어야한다고 생각하지 않았다. (당신이 구문을 고칠 수 있다면, 나는 아직 할 수 없다) – pascal