【问题标题】:Can I override and use a subclass for the template type in as the super class我可以覆盖并使用模板类型的子类作为超类吗
【发布时间】:2012-03-13 21:56:07
【问题描述】:

我可以覆盖并使用模板类型的子类作为超类吗?

我是一名 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 不需要泛型

【问题讨论】:

  • 您正在制作class Box { Box b; };。只有法恩斯沃思教授被允许这样做。

标签: c++ templates generics


【解决方案1】:

原则上,您对模板的使用被称为“Curiously recurring template pattern”(CRTP)并且完全有效。

但是,请注意,Java 泛型和 C++ 模板在很多方面都非常不同,包括在 A 中使用 B 的限制。派生的 CRTP 类在模板实例化时不完整,因此您不能分配任何对象他们像你一样在基类中。这就是您的代码无法编译的原因。通常的方法是在访问器方法中进行转换,例如:

 void set(T tt){
    static_cast<T&>(*this)=tt;
 }

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 2022-06-18
    • 2011-09-11
    • 2013-09-26
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多