如何使用子类获取部分模板

时间:2019-05-23 06:29:20

标签: c++ templates inheritance polymorphism

我正在尝试使具有结构和子结构的模板通用, 但是我的代码无法推断出正确的模板。 这是我的代码的抽象

#include <iostream>
using namespace std;
struct A{

};
struct B{

};
struct AA:public A{

};
struct BB:public B{

};

template<class container>
class Base{

};
template<class container>
class Derived:Base<container>{
    Derived() = delete;
};
template<>
class Derived<A>:Base<A>{

};
template<>
class Derived<B>:Base<B>{

};
int main() {
    Derived<AA> a;
    return 0;
}

出现错误

error: call to deleted constructor of 'Derived<AA>'

我希望struct A及其子类可以与

一起使用
template<>
class Derived<A>:Base<A>{

};

我该怎么做,或者我应该参考什么材料? 寻求帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用部分专业化,例如

// primary template
template<class container, class = void>
class Derived : Base<container> {
    Derived() = delete;
};

// partial specialization for A and its derived classes
template<class container>
class Derived<container, std::enable_if_t<std::is_base_of_v<A, container>>> : Base<container> {
};

,如有必要,还可以进行完全专业化。

// full specialization for B
template<>
class Derived<B, void> : Base<B> {
};

LIVE