인프런 커뮤니티 질문&답변

snu님의 프로필 이미지
snu

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

typecast 강의 관련 질문입니다.

작성

·

148

0

template<typename T, typename... U>
struct Length<TypeList<T, U...>>
{ enum { value = 1 + Length<TypeList<U...>>::value }; };
 
int32 len1 = Length<TypeList<Mage, Knight>>::value;
 
위 코드에서 Length<TypeList<Mage, Knight>>가 처음 호출되게 되면
T = Mage, U = Knight가 되어 
                                                     
value = 1(Mage) + Length<(Knight=>)TypeList<U...>>::value가 된다고 알고있습니다.
 
그런데
template<typename T, typename... U>

struct Length<TypeList<T, U...>> {   }

로 Length 구조체 자체가 T,와 가변인자 U를 받는데 어떻게
value = 1 + Length<TypeList<U...>>::value
에서 가변인자 U...하나만 받을 수 있는지 궁금합니다.
재귀호출이 되려면
Length<TypeList<Mage, Knight>>::value;
처럼 TypeList에
T에 해당하는 것과 U에 해당하는것을 모두 넣어야하지 않나요?
 

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

Length<TypeList<Mage, Knight>>::value; 처럼 TypeList에
T에 해당하는 것과 U에 해당하는것을 모두 넣어야하지 않나요?

그건 아니구요 1개를 뺀 나머지가 포인트입니다.
A, B, C라면 Length(A, B, C) = 1 + Length(B + C) = 1 + 1 + Length(C)느낌인 것이죠.

 
 
snu님의 프로필 이미지
snu
질문자

template<typename T, typename... U>
struct Length<TypeList<U...>>
{ enum { value = 1 + Length<TypeList<U...>>::value }; };
답변 감사합니다.
그럼 애초에 템플릿 선언 자체를 위와 같이 가변인자만 받도록해도 동일한가요?
두번째 호출 부터는 인자에 TypeList<U...>만 전달되니 말입니다.
아니면 T,U...처럼 구분자가 있어야 처음 값을 떼어내고 나머지 인자들부터 전달되나요?
Rookiss님의 프로필 이미지
Rookiss
지식공유자

그건 아니구요.
Length<TypeList<T, U...>>
{ enum { value ...

의 의미는 Length<TypeList<T, U...>::value = 1 + Length<TypeList<U...>::value

입니다.
snu님의 프로필 이미지
snu
질문자

감사합니다

snu님의 프로필 이미지
snu

작성한 질문수

질문하기