包含子类的泛型类的类

时间:2010-10-22 13:05:23

标签: c++ templates inheritance

是否有任何可能的方法可以使用泛型类型来包含基类的子类。

从赋予我的任务中,我将在结构中创建类似于以下内容的东西。

template <class T>
class Fruit {
  private:
    int count;
    int location_id;
    T type;
  public:
    virtual void displayInfo();
};

class Apple : private Fruit<Apple> {
  private:
    int variety;
  public:
    void displayInfo() {
        printf("Location %i has %i of %s in stock", location_id, count, variety);
    }
};

Fruit<Apple> appleinventory[SIZE];

基本上,我认为你不能让模板泛型类型与派生类相同。我错了吗?有类似的东西可能有用吗?

更新: 对于赋值,我相信我们将使用继承来显示虚函数的使用。我已经更新了上面的代码。我认为这样可行,但不需要模板才能成功。我们没有在课程中介绍任何高级的冗余继承方法。

2 个答案:

答案 0 :(得分:0)

忽略你为什么要这样做的问题....你可以通过以下方式获得一些方法:

template <class T> class Fruit 
{
private:
    int count;
    int location_id;
    T* type;
};

class Apple : private Fruit<Apple> 
{
private:
    int seeds;
    bool red;
};

Fruit<Apple> appleinventory[SIZE];

请注意,T *类型现在是Apple的指针,而不是Apple的实例。

答案 1 :(得分:0)

原则上这完全没问题。

阅读有关Curiously Recurring Template Pattern (CRTP)的更多信息,了解有关使用派生类作为其基础的类模板中的实例化类型的更多信息,尤其是关于静态多态性的示例,这应该看起来“好奇”熟悉。

template <class Derived> struct Base
{
    void interface()
    {
        // ...
        static_cast<Derived*>(this)->implementation();
        // ...
    }

    static void static_func()
    {
        // ...
        Derived::static_sub_func();
        // ...
    }
};

struct Derived : Base<Derived>
{
    void implementation();
    static void static_sub_func();
};