我仍然在学习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>
{
}
答案 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>
{
};