질문과 답변

C++ 템플릿 예제 질문입니다 날짜:2024-2-15 9:43:18 조회수:950
작성자 : L0st_P4inting
포인트 : 7
가입일 : 2020-08-08 22:59:31
방문횟수 : 13
글 1개, 댓글 1개
소개 :
작성글 보기
쪽지 보내기
8-1-5. 동일한 알고리즘 조건의 SwapArray의 예시와
8-3-2. 특수화의 Specialization 예시에서
template <class T> 라고 해두셔서
찾아보기론 원래 스트롭스트룹씨가 <class T> 를 밀고 있었는데
혼동이 온다고 typename으로 고쳤다고 하는데
꼭 class T로 써야하는 예외가 있다고 들었습니다.

<typename T>와 <class T>의 차이점이 무엇인가요?
그리고 예시에선 왜 class T로 작성하셨는지도 궁금합니다. 위의 예외 사항 때문인가요? error code: 522 error code: 522

목록보기 삭제 수정 신고 스크랩

tempname 5월13일 4:06:20  

모던 C++ 기준으로는 아주 사소한 차이 외에는 차이가 없습니다.
https://stackoverflow.com/questions/2023977/what-is-the-difference-between-typename-and-class-template-parameters의 내용을 인용하였습니다.

1. 템플릿 템플릿 파라미터를 전달할 때 (until C++ 17, 다만 g++ 10.5 버전 기준으로 std=c++98 옵션을 부여해도 컴파일 가능)
예시 코드
template <template <typename, typename> class C, typename T> // C 앞의 class는 typename으로 치환 불가
struct Container {
C<T, std::allocator<T>> container_;
};

int main()
{
Container<std::vector, int> c {};
}

2. class 템플릿을 명시적으로 인스턴스화 할 때
template class Foo<int>;

참고로, 예시로 드신 template <typename T>와 template <class T>는 실제로 아무런 차이가 없습니다.

L0st_P4inting 5월19일 12:10:51  

감사합니다. 질문한지 꽤 되서 답글이 달린줄 모르고 있어서 감사인사가 늦었습니다. 좀 더 찾아보니 중복할때도 차이가 있다고 하네요.


로그인하셔야 댓글을 달 수 있습니다.