C++에서 가변 길이의 튜플을 수정하는 함수가 있을 수 있나요?

StackOverflow https://stackoverflow.com/questions/80348

  •  09-06-2019
  •  | 
  •  

문제

C++0x에서는 다음과 같은 함수를 작성하고 싶습니다.

template <typename... Types>
void fun(typename std::tuple<Types...> my_tuple) {
    //Put things into the tuple
}

나는 처음에 for 루프를 사용하려고 시도했습니다. int i 그런 다음 다음을 수행하십시오.

get<i>(my_tuple);

그런 다음 결과에 일부 값을 저장합니다.하지만, get 에서만 작동합니다 constexpr.

변수를 가져올 수 있다면 tuple 인수를 통해 매우 쉽게 재귀할 수 있는 가변 템플릿 함수에 전달합니다. 하지만 변수를 튜플에서 가져오는 방법을 전혀 모릅니다. get.이를 수행하는 방법에 대한 아이디어가 있습니까?아니면 이것을 수정하는 다른 방법이 있는 사람이 있나요? tuple?

도움이 되었습니까?

해결책

"i" 이후

get<i>(tup)

컴파일 타임 상수여야 하며 템플릿 인스턴스화는 값을 통해 "반복"(실제로 재귀)하는 데 사용됩니다.부스트 튜플에는 여기서 도움이 될 수 있는 "길이" 및 "요소" 메타 기능이 있습니다. C++0x에도 이러한 기능이 있다고 가정합니다.

다른 팁

부스트.퓨전 볼만한 가치가 있습니다.'반복'할 수 있습니다. std::pair, boost::tuple, 일부 다른 컨테이너 및 자체 튜플 유형(지원하지 않는 것 같지만) std::tuple 아직.

AFAICT, C++ 튜플은 기본적으로 재귀로 처리해야 합니다.튜플을 패킹/언패킹하는 실제 방법이 없는 것 같습니다. 제외하고 유형 시스템의 유일한 가변 템플릿 처리를 사용합니다.

TR1의 섹션 6.1.3.4를 살펴보세요. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf

get은 const 및 non-const 자격을 갖춘 튜플 모두에 대해 정의되고 적절한 참조 유형을 반환합니다.함수 선언을 다음과 같이 변경하는 경우:

template 
void fun(typename std::tuple& my_tuple) {
    //Put things into the tuple
}

그런 다음 함수에 대한 인수는 const가 아닌 튜플이며 get을 사용하면 이전 응답에서 제공된 정보를 사용하여 반복을 작성한 후 필요한 할당을 수행할 수 있습니다.

튜플 인수를 함수 호출로 풀기 위한 템플릿 재귀의 예는 여기에서 내 대답을 살펴보세요.

튜플을 가변 템플릿 함수의 인수로 어떻게 확장합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top