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