C++ 类如何继承自身?

C++ 类如何继承自身?,c++,templates,inheritance,C++,Templates,Inheritance,我不理解以下代码: template <int _id> class Model; template <int _id> class Model : public Model<0> { ... }; 模板类模型; 模板类模型:公共模型{…}; 所以,类模型似乎是从自身派生出来的。这不会使用EDG或Gcc编译(错误:不完整类型“类模型”的使用无效),但Visual Studio接受它。什么编译器是正确的,原因是什么 所以,类模型似乎是从自身派生出来的 该类

我不理解以下代码:

template <int _id> class Model;

template <int _id> class Model : public Model<0> { ... };
模板类模型;
模板类模型:公共模型{…};
所以,类模型似乎是从自身派生出来的。这不会使用EDG或Gcc编译(错误:不完整类型“类模型”的使用无效),但Visual Studio接受它。什么编译器是正确的,原因是什么

所以,类模型似乎是从自身派生出来的

该类不继承自身。
模型的每一个安装都是一个不同的、不相关的类

这不会使用EDG或Gcc编译(错误:不完整类型“类模型”的使用无效),但Visual Studio接受它。什么编译器是正确的,原因是什么

GCC是正确的,就使用而言,
Model
是不完整的。继承需要完整的类声明

什么编译器是正确的,原因是什么

微软的编译器在处理模板扩展的方式上不同于clang和gcc(参见“两阶段查找”)

gcc实现更接近标准

如果您希望所有模型都具有
Model
的特性,那么我想我会将公共代码推迟到不同的基类,当然,基类本身可能是一个模板

e、 g

模板类ModelImpl
{
void modelly_thing(){};
};
模板类模型
:public ModelImpl
{
};

为什么
ModelImpl
\u id
上参数化?它实现了以前的had
id==0
,这不正是它实现的基础的全部要点吗
template <class Outer, int _id> class ModelImpl
{
    void modelly_thing() {};
};

template <int _id> class Model 
: public ModelImpl<Model<_id>, 0> 
{

};