我可以覆盖并使用模板类型的子类作为超类。
我是一名Java程序员,这适用于泛型,但我不熟悉如何在C ++中做很多事情
我可以使用课程
template <typename T>
class A{
public:
T get(){
return t;
}
A(){
}
void set(T tt){
t=tt;
}
private:
T t;
};
用类似于
的东西扩展它class B:A<B>
其中子类B用作A类的泛型类型,而B类不需要泛型
答案 0 :(得分:1)
原则上,您对模板的使用称为“奇怪的重复模板模式”(CRTP)并且完全有效。
但是,请注意Java泛型和C ++模板在很多方面都有很大差异,包括在A中使用B的限制。派生的CRTP类在模板实例化时是不完整的,因此您不能分配任何对象他们像你一样在基类中。这就是代码无法编译的原因。通常的方法是使用访问器方法,例如:
void set(T tt){
static_cast<T&>(*this)=tt;
}
答案 1 :(得分:0)