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
上参数化?它实现了以前的hadid==0
,这不正是它实现的基础的全部要点吗
template <class Outer, int _id> class ModelImpl
{
void modelly_thing() {};
};
template <int _id> class Model
: public ModelImpl<Model<_id>, 0>
{
};