• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

typecast 강의 관련 질문입니다.

22.02.15 14:58 작성 조회수 110

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

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

질문자

2022.02.15

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

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

입니다.
snu님의 프로필

snu

질문자

2022.02.15

감사합니다