0
은 가능합니까?특수 버전이 원래 템플릿 클래스와 일부 기능을 공유 할 수 있습니까? 클래스의 전문 버전의 일부 또는 원본 템플릿 클래스의 모든 기능을 공유 할 수
즉 템플릿 클래스가 고려,
template <typename T>
class A
{
A()
{}
A(const A& ref)
{}
void f1()
{
//do something
}
void f2()
{
//do something
}
void f3()
{
//do something
}
}
그리고 그것은 단지뿐만 아니라 일반 버전으로 원래의 일반적인 기능을 몇 가지 추가 기능을 추가하려는 특정 데이터 유형에 대한 전문 버전이 있습니다.
template<>
class A<int>
{
void f4()
{
//do something
}
}
이제이 전문 버전은 가능하면 생성자를 포함한 일반 버전의 모든 것을 공유해야합니다. 유도에 지나지 구성된 템플릿 클래스와,
template <typename T>
class A_base
{
// All the f1() functions, et. al, implemented here
};
template<typename T> class A : public A_base<T> {
public:
// An empty shell of a class, with the constructor
// forwarding its arguments to the superclass.
template<typename ...Args> A(Args && ...args)
: A_base(std::forward<Args>(args)...)
{
}
};
template<>
class A<int> : public A_base<int>
{
// Same constructor.
void f4()
{
//do something
}
};
당신은 기본 클래스로 모든 클래스 메소드, 클래스 멤버, 이동 결국 :
아마 상속은 더 나은 선택이 여기에? –
아니, 원하는만큼 똑바로 진행할 수는 없습니다. 이 점을 염두에 두십시오. 각 템플릿 특수화 컴파일러에 대한 다른 종류의 (따라서 이름 (로, 별도의 클래스 정의이다 상관없이 그들이 당신에 같은 이름을 가진 것으로 보면 –
경우 당신이 인식하지 못하는 것, 그것은으로 가능 전체 클래스를 전문화하지 않고 클래스 템플릿의 개별 기능을 전문화합니다. –