1
템플릿 클래스를 전문화하여 Base 유형의 포인터와 다른 모든 포인터 유형에 대해 다르게 동작하게하고 싶습니다. 나는 그것을 사용하여 그것을 시도했다. 하지만 원하는 방식대로 작동하지 않습니다. 아무도 그것에 대해 무엇을해야하는지 말해 줄 수는 없어요. 내가 시도 코드 : 기존 과부하 집합의 부분 집합에 enable_if
를 추가 할 때포인터에 대한 템플릿 특수화
class Base
{
};
class Derived:public Base
{
};
class Non_base
{
};
template<class T,class Enable=void> class Vector
{
public:
Vector()
{
cout<<"Constructor of Vector "<<endl;
}
};
template<class T> class Vector<T*>
{
public:
Vector()
{
cout<<"Constructor of Vector<T *> "<<endl;
}
};
template<> class Vector<Base*>
{
public:
Vector()
{
cout<<"Constructor of Vector<Base*> fully specialized"<<endl;
}
};
//template<class T> class Vector<T *>:public Vector<Base *>
//{
//public:
// Vector()
// {
// cout<<"Constructor of Vector<Base*> partially specilized"<<endl;
// }
//};
template<class T> class Vector<T*,typename enable_if<is_base_of<Base,T>::value>::type>
{
Vector()
{
cout<<"Constructor of Vector<Base*> partially specilized"<<endl;
}
};
템플릿 함수에 대해 동일한 작업을 수행하려고하면 오류가 발생합니다. 올바른 것으로 보이는 템플릿 클래스를 다시 선언하십시오. 나는 포인터를 가지고 함수를 선언했다. 하나는 Base 타입이고 다른 타입은 기본 타입이 아닌지 검사했다. 그러나 두 기능 모두 동일한 논점을 가지고 있습니다. 어떻게 피할 수 있습니까? – sajas
흠, 당신이 묘사하는 것이 확실하지 않습니다. 다른 질문을 열 수도 있습니다. – Potatoswatter