我正在尝试使具有结构和子结构的模板通用, 但是我的代码无法推断出正确的模板。 这是我的代码的抽象
#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>{
};
我该怎么做,或者我应该参考什么材料? 寻求帮助!
答案 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> {
};