2017-12-25 36 views
1

, 다른 함수로 전달하기 전에 표현, 당신은 각 멤버 함수를 호출, 매개 변수 팩을 매핑 할 수 있습니다 겹 :멤버 함수를 사용하여 매개 변수 팩을 매핑하는 방법은 무엇입니까? (비 재귀, 사전 배 식) C++ 17에서

template <typename... Ts> 
double func(const Ts&... ts) { ... } 

template <typename... Us> 
double func2(const Us&... us) 
{ 
    // assume all member_func return types are non-void 
    return func((us.member_func(1), ...)); 
} 

인가 C++ 14에서 비슷한 비 재귀 적 매핑을 수행 할 수 있습니까?

+2

실제로 다른 모든 기능에 모두 전달하지는 않습니다. 마지막 인수에서 함수를 호출 한 결과 만 전달합니다. – StoryTeller

답변

3

원래 코드는 하나의 인수 만 함수에 전달합니다. 그 이유는 다음과 같습니다.

(us.member_func(1), ...) 

쉼표 연산자는 꺾은 결합식이 적용됩니다. 순서대로 모든 멤버를 호출하지만 표현식의 값은 마지막 호출이 반환하는 값입니다.

template <typename... Us> 
double func2(const Us&... us) 
{ 
    // assume all member_func return types are non-void 
    return func(us.member_func(1) ...); 
} 

그냥 일반 팩 확장에 :

각 개체의 멤버를 호출하고 다음 기능에 모든 결과를 전달하려는 가정, 수정도 유효 C++ (14)로 밝혀 졌 함수 인자 목록. 비록 이러한 호출 사이에 시퀀싱 요구 사항이 없어도 좋습니다. 쉼표 연산자는 함수 인수에 대한 평가가 훨씬 적은 순차 보증을 제공합니다.