我可以重写并使用中模板类型的子类作为超级类吗
Can I override and use a subclass for the template type in as the super class
我可以重写并使用中模板类型的子类作为超级类吗。
我是一名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不需要泛型
原则上,您对模板的使用被称为"奇怪的重复模板模式"(CRTP),并且完全有效。
然而,请注意,Java泛型和C++模板在很多方面都有很大的不同,包括在A中使用B的限制。派生的CRTP类在模板实例化时是不完整的,因此您不能像以前那样在基类中分配它们中的任何对象。这就是代码不编译的原因。通常的方法是强制转换访问器方法,如:
void set(T tt){
static_cast<T&>(*this)=tt;
}
是:http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern
相关文章:
- C ++类型特征:确保子类实现方法
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 为什么带有指针子对象的文字类类型的 constexpr 表达式不能是非类型模板参数
- 附加类型安全的子类std::string
- 将方法参数类型更改为子类中的派生类
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 在子类上调用模板化静态方法时获取类的类型名
- 使用子类中的类型定义扩展模板类
- 当函数返回类型为父类时,如何返回子类的对象?
- 模型类/子类,其中子类类型在C++中先验未知
- C 模板继承.子类应用固定类型替换基类中的类型
- 可以将指向子类的指针分配给Varibale的超级类型
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 在虚拟函数中使用子类类型参数
- C++子类类型的输出变量
- 如何返回“set”方法的子类类型
- 可以对返回子类类型的基类进行赋值操作符吗?
- 如何使子类上的操作符返回子类类型?
- 使用子类"类型转换"错误的 C++