C++ 以子类作为模板参数的继承类
可以用子类作为模板参数继承类吗C++ 以子类作为模板参数的继承类,c++,templates,inheritance,C++,Templates,Inheritance,可以用子类作为模板参数继承类吗 template<typename T> struct A{ T t; }; struct B:A<B>{ unsigned u; }; int main(){ B b; } 模板 结构A{ T; }; 结构B:A{ 未签名的u; }; int main(){ B B; } 是的,你能做到 您的问题似乎是错误“A::t”的类型不完整。例如,见 如果你 在A之前声明B,并且 在结构a中使用指针,它工作得很好 structb
template<typename T>
struct A{
T t;
};
struct B:A<B>{
unsigned u;
};
int main(){
B b;
}
模板
结构A{
T;
};
结构B:A{
未签名的u;
};
int main(){
B B;
}
是的,你能做到
您的问题似乎是错误“A::t”的类型不完整
。例如,见
如果你
structb;
模板
结构A{
T*T;
};
结构B:A{
未签名的u;
};
int main(){
B B;
}
是的,你能做到
您的问题似乎是错误“A::t”的类型不完整
。例如,见
如果你
structb;
模板
结构A{
T*T;
};
结构B:A{
未签名的u;
};
int main(){
B B;
}
这是可能的
Template <class T>
struct A {};
struct B : public A<B> {};
模板
结构A{};
结构B:公共A{};
它不能很好地处理容器。参见Stroustrup 19.2.4 p686的“编程原理和实践第二版” 这是可能的
Template <class T>
struct A {};
struct B : public A<B> {};
模板
结构A{};
结构B:公共A{};
它不能很好地处理容器。参见Stroustrup 19.2.4 p686的“编程原理和实践第二版” 可以,但在上面的例子中,不能将其用作非静态数据成员
template<typename T>
struct A{
static T t;
};
template<typename T>
T A<T>::t=T();
struct B:A<B>{
unsigned u;
};
int main(){
B b;
}
模板
结构A{
静态T;
};
模板
T A::T=T();
结构B:A{
未签名的u;
};
int main(){
B B;
}
您可以,但在上面的例子中,它不能,您不能将它用作非静态数据成员
template<typename T>
struct A{
static T t;
};
template<typename T>
T A<T>::t=T();
struct B:A<B>{
unsigned u;
};
int main(){
B b;
}
模板
结构A{
静态T;
};
模板
T A::T=T();
结构B:A{
未签名的u;
};
int main(){
B B;
}
这里的子类作为模板参数给出。是的,这是可能的。只是不是T的成员基类中的code>。查看以了解它的用途。这里的子类作为模板参数提供。是的,这是可能的。只是不是T的成员基类中的code>。查看,看看它有什么用处;但是在结构a
中添加对类型T
的引用,它无法编译,因为编译器在代码中的模板实例化点不知道类型B
(类似于a#def
)。。所以,虽然您的示例是正确的,但它并没有考虑到定义的范围以及它如何影响模板;但是在结构a
中添加对类型T
的引用,它无法编译,因为编译器在代码中的模板实例化点不知道类型B
(类似于a#def
)。。所以,虽然你们的例子是正确的,但它并没有考虑到定义的范围以及它如何影响模板。只有第2点是必要的。我本能地在A之前声明了B,但这是可选的。只有第2点是必要的。但是T
的静态数据成员将非常无用。但是T
的静态数据成员将非常无用。