0

我还在学习C++的过程中。这是我的场景。我有三个班。最顶层的基类是模板化的。从基础派生的中间类也是模板化的。我打算使用的派生(具体类)继承了中间类。我明确地实例化了中间类。但是,编译器每次说 Base 类未定义时都会抛出一个错误。如何以完全定义基类的方式实例化中间类?

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

TopBase.h

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

中间.h

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

具体的.h

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


class Concrete :
   public Middle<TConcrete>
{
}
4

1 回答 1

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>
{
};
于 2013-11-06T21:12:00.617 回答