인스턴스를 만들지 않고 std :: array <T, N>의 요소 수를 얻는 방법은 무엇입니까?


9

std::array<T, N>::size()있지만 정적이 아니므로의 인스턴스가 필요합니다 std::array. (는 IS는 반환 값을 얻을 수있는 방법이 있습니까 N의를 std::array<T, N>배열의 인스턴스를 생성하지 않고)는? 일반 배열의 경우을 사용할 수 sizeof있었지만 이것이 sizeof(std::array<T, N>) == N * sizeof(T)사실 이라는 보장은 없습니다 .


당신이 가지고 있다면 N, 왜 array그것을 대신 해달라고 요청해야 합니까?
ShadowRanger

@ShadowRanger sizeof(std::array<T, N>) == N * sizeof(T)사실 일 필요는 없기 때문입니다.
NathanOliver

배열은 다른 곳에서 typedef 될 수도 있고 템플릿에 인수로 전달 될 수도 있기 때문입니다.
dragonroot

1
요소 수를 알고 싶다면을 사용하십시오 N.
JohnFilleau

1
@dragonroot이 모든 것의 요점은 무엇입니까? 이미 N시작해야하는 경우 N간접적으로 가져 오거나이를 확인하기 위해이 모든 과정을 거칠 필요가 없습니다 N==N. 해결하려는 실제 사용 사례 는 무엇입니까 ?
레미 레보

답변:


14

있습니다 std::tuple_size<std::array>.

static_assert(std::tuple_size<std::array<int, 5>>::value == 5);

std :: size () 는 평범 하지 않습니까?
Jesper Juhl

2
@JesperJuhl 실제로 아니요, std::size()배열 인스턴스가 필요합니다.
18:39에

1
tuple_size배열 크기를 미리 알고 템플릿에 전달하는 경우 이미 사용하는 것은 이치에 맞지 않습니다 . 아마도 이것이 더 의미있는 예일까요? using ArrayType = std::array<int, 5>; ... static_assert(std::tuple_size<ArrayType>::value == 5);
레미 레보

@RemyLebeau O / P가 배열 decl이 템플릿 함수에 템플릿 인수로 전달되었다고 생각하고 있습니까? 그럼에도 불구하고 내가 볼 수있는 유일한 목적은 인스턴스를 생성 해야하는 반환 된 객체로 할당하는 것입니다.
20:07에 보석 테일러
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.