중첩 템플릿과 그 템플릿 전문화에 문제가 있습니다.템플릿 특수화 <typename T 템플릿 <typename> class U>
이작은 템플릿 클래스
template<class U>
class T {
public:
T(){}
virtual ~T(){}
};
그리고 중첩 템플릿
template<typename T, template<typename> class U>
class A {
public:
void foo()
{
std::cerr << "A generic foo";
}
};
어떤 종류의 작은 MAIN.CPP
int main(int argc, const char *argv[])
{
A<int,T> *a = new A<int,T>;
a->foo();
//This wont work:
A<double,T*> *b = new A<double,T*>;
b->foo();
return 0;
}
지금 내가 필요 : 다음 클래스 감안할 때 U가 포인터 인 경우 특수화 :
A<double,T*> *b = new A<double,T*>;
b->foo();
어떻게해야합니까? 내가 좋아하는 뭔가를 시도 :
template<typename T, template<typename> class U>
class A< T, U* >
{
public:
void foo()
{
std::cerr << "A specialized foo";
}
};
을하지만 T*
은 아무런 의미가 없기 때문에 그냥, 당신이 할 보내려하는 것은 불가능하다
A.h:18:16: Error: Templateargument 2 is invalid
혼란스러워합니다. –
@ildjarn : 아니요. 'A'는 하나의 매개 변수를 가진 템플릿 유형을 기대하기 때문에 괜찮습니다. 'T'는 그 법안에 부합한다. – bitmask
@bitmask : 아, 완전히 맞았습니다. 나는 분명히 관심을 기울이지 않았습니다. – ildjarn