가변 템플릿 함수에 대한 인수 개수를 어떻게 구할 수 있습니까?
즉 :
template<typename... T>
void f(const T&... t)
{
int n = number_of_args(t);
...
}
number_of_args
위에서 구현하는 가장 좋은 방법은 무엇입니까 ?
가변 템플릿 함수에 대한 인수 개수를 어떻게 구할 수 있습니까?
즉 :
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) + ...);
도움이되기를 바랍니다.
sizeof...
및 constexpr
. :)
sizeof...
실제로 모든 인수의 결합 된 저장 크기가 아닌 인수의 수를 반환 sizeof
합니까 (배열에서 와 같이 )?
sizeof ...(T)
에 패킹 된 유형의 수 를 반환합니다 T
. 패킹 된 유형의 집계 된 크기를 계산하려면 다음과 같이해야합니다. ideone.com/udggBk 제 대답에도 이것을 추가했습니다.
return (0 + ... + sizeof(t));
sizeof...(T)
.