Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从模板参数派生的类_C++_Templates_Inheritance - Fatal编程技术网

C++ 从模板参数派生的类

C++ 从模板参数派生的类,c++,templates,inheritance,C++,Templates,Inheritance,不允许使用派生类的多个定义,因此以下是编译时错误 class A1 { }; class A2 { }; class Derived: public A1 { }; class Derived: public A2 { }; 同样,为什么下面的不是编译时错误? 派生的类是否有两个版本,一个继承自A1,另一个继承自A2 class A1 { }; class A2 { }; template<class T> class Derived:

不允许使用派生类的多个定义,因此以下是编译时错误

class A1
{    };

class A2
{    };

class Derived: public A1
{    };
class Derived: public A2
{    };
同样,为什么下面的不是编译时错误?
派生的
类是否有两个版本,一个继承自
A1
,另一个继承自
A2

class A1
{    };

class A2
{    };

template<class T>
class Derived: public T
{    };

int main()
{
        Derived<A1> *ptr1 = new Derived<A1>;
        Derived<A2> *ptr2 = new Derived<A2>;    
}
A1级
{    };
A2类
{    };
样板
派生类:public T
{    };
int main()
{
派生*ptr1=新派生;
派生*ptr2=新派生;
}

A1
A2
继承下来的
衍生类将不会有两个
分类,但从字面上讲,一个
衍生类解释得更好:

模板实例化涉及生成一个具体的类或 特定模板组合的函数(实例) 争论


而且根本不会有
派生的
类。正如max66在评论中指出的那样,
派生的
不是一个类,而是一个类模板,它不会单独编译而不实例化。

因为
派生的
,不同的
T
,是不同的classes@anurag86:模板参数是类型的一部分(它们与二进制文件中的类名相混淆)
派生的
不是类,而是类模板<代码>派生的
派生的
是类;但不同,“类的名称保持不变”不是。您有两个不同的类:
派生的
派生的
<代码>派生的
本身不是一个类,而是一个类模板。“它没有被弄坏。”但它是吗
typeid(…).name()
分别为我提供了
7DerivedI2A1E
7DerivedI2A2E
。只是在类中添加了几个函数并调用了它们。然后运行
nm out | xargs c++filt | grep-Derived
,结果显示没有
Derived
,但是
Derived
Derived
。谢谢大家