IT TIP

C ++ 11 : 가변 템플릿 함수 매개 변수의 수?

itqueen 2020. 10. 19. 13:45
반응형

C ++ 11 : 가변 템플릿 함수 매개 변수의 수?


가변 템플릿 함수에 대한 인수 개수를 어떻게 구할 수 있습니까?

즉 :

template<typename... T>
void f(const T&... t)
{
    int n = number_of_args(t);

    ...
}

number_of_args위에서 구현하는 가장 좋은 방법은 무엇입니까 ?


다음과 같이 작성하십시오.

const std::size_t n = sizeof...(T); //you may use `constexpr` instead of `const`

n와 같은 상수 표현식이 필요한 당신이 그것을 사용할 수 있습니다 수단 상수 표현 (즉, 컴파일 타임에 알려진)입니다 :

std::array<int,   n>  a; //array of  n elements
std::array<int, 2*n>  b; //array of (2*n) elements

auto middle = std::get<n/2>(tupleInstance);

패킹 된 유형의 집계 된 크기 ( 팩의 유형 와 반대)를 계산 하려면 다음과 같이해야합니다.

template<std::size_t ...>
struct add_all : std::integral_constant< std::size_t,0 > {};

template<std::size_t X, std::size_t ... Xs>
struct add_all<X,Xs...> : 
  std::integral_constant< std::size_t, X + add_all<Xs...>::value > {};

다음을 수행하십시오.

constexpr auto size = add_all< sizeof(T)... >::value;

C ++ 17 (이상)에서는 fold 표현식을 사용하여 유형의 크기 합계를 계산하는 것이 훨씬 더 간단 합니다.

constexpr auto size = (sizeof(T) + ...);

도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/12024304/c11-number-of-variadic-template-function-parameters

반응형