반응형
종속적인 템플릿 이름은 template 키워드를 함께 사용해야 합니다.
#include <iostream>
#include <vector>
#include <list>
using namespace std;
class Test
{
public:
template<typename T> static void f() {}
template<typename T> class Complex {};
};
template<typename T> void foo(T a) // T: Test
{
// OK
Test::f<int>();
// Error(임의 타입 T에서 < 연산자의 정의를 알 수 없음)
//T::f<int>();
// OK(임의 타입 T로 사용할 경우 ::template 키워드를 사용해야한다.)
T::template f<int>();
// OK
Test::Complex<int> c1;
// Error(::Complex가 값인지 타입인지 알수 없음)
//T::Complex<int> c2;
// Error(임의 타입 T에서 < 연산자 정의를 알 수 없음)
//typename T::Complex<int> c3;
// OK(임의 타입 T로 사용할 경우 ::template 키워드를 사용해야한다.)
typename T::template Complex<int> c4;
}
int main()
{
Test t;
foo<Test>(t);
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 템플릿 특수화/부분 특수화(Template specialization) (0) | 2021.01.02 |
---|---|
C++ 템플릿 파라미터(Template parameters) (0) | 2021.01.02 |
C++ 템플릿 value_type (0) | 2021.01.01 |
c++ 템플릿 typename (0) | 2020.12.31 |
C++ 템플릿 template과 friend (0) | 2020.12.31 |