多级继承的模板实例化

时间:2013-11-06 20:57:41

标签: c++ templates inheritance multi-level

我仍然在学习C ++。这是我的情景。 我有三节课。最顶层的基类是模板化的。 源于基础的中产阶级也是模板化的。 我打算使用的派生(Concrete类)继承了midddle类。 我明确地实例化了Middle类。但是,编译器每次都会抛出一个错误 Base类未定义。如何以这样的方式实例化Middle类 基类是完全定义的吗?

以下是如何定义这些类的概述:

TopBase.h

template <class T>
class TopBase
{
   typedef typename T::Concrete Concrete;
}

Middle.h

template <class T>
class Middle : public TopBase<T> 
{
   typedef typename T::Concrete Concrete;
}
Middle() : TopBase<T>() {}

Concrete.h

struct TConcrete {
static int x;
typedef Concrete instance;
}


class Concrete :
   public Middle<TConcrete>
{
}

1 个答案:

答案 0 :(得分:0)

你的typedef Concrete实例中有一个错误,因为在实例化Middle时会使用Concrete typename。

template <class T>
class TopBase
{
   typedef typename T::Concrete Concrete;
};

template <class T>
class Middle : public TopBase<T> 
{
public:
    Middle() : TopBase<T>() {}
    typedef typename T::Concrete Concrete;
};

class ConcreteX;

struct TConcrete {
  static int x;
  typedef ConcreteX Concrete; // <-- here was an error
};

class ConcreteX :
   public Middle<TConcrete>
{
};