c++ - 从模板参数派生的类
问题描述
类的多个定义Derived
是不允许的,所以下面是编译时错误。
class A1
{ };
class A2
{ };
class Derived: public A1
{ };
class Derived: public A2
{ };
同样,为什么以下不是编译时错误?不会有 2 个版本的Derived
类,一个继承自,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>;
}
解决方案
不会有两个类Derived
,继承自A1
and A2
,但实际上是一个类Derived<A1>
and Derived<A2>
。您传递给模板参数的数据成为类的一部分。DelcaringDerived<A1>
并将其传递A1
给T
您实例化类模板的模板参数。
我认为这里解释得更好:
模板实例化 涉及为模板参数的特定组合生成具体的类或函数(实例)。
而且根本就没有Derived
课。正如max66在评论中指出的,Derived
不是类,而是类模板,不会单独编译,没有实例化。
推荐阅读
- fortran - 如何显示不连续函数
- javascript - 在 SVG 中动态插入图像不显示
- microsoft-graph-api - 如何以编程方式触发 OneDrive/OneNote 同步?
- java - ALPN 回调被丢弃:SPDY 和 HTTP/2 被禁用。alpn-boot 在引导类路径上吗?
- java - java中有没有像setw()这样的内置函数?如果不是,我该如何格式化?
- java - 在成功的 FormData POST 请求上获取“404 Not Found”
- javascript - 从 API 搜索中获取随机结果
- c# - C# - Visual Studio 中从 SQL 导出数据到 TreeView 的问题
- python - 加快 PostgreSQL/SQLAlchemy 中的 JSONB 全文搜索
- android - 在 ExoPlayer 播放之前预缓冲视频