请教下为什么基类可以是一个非完整的类,比如ATL中的 class D1 : public B1

dahaiI0 2013-09-26 06:03:55
水平不够,看了半天依旧没怎么看懂,求指点。。
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 dahaiI0 的回复:
[quote=引用 6 楼 healer_kx 的回复:] B不是一个类,是类模板,B<D>才是一个类。 WTL里面用这个主要实现静多态吧?
可是为什么D的定义还没完整或者说D只定义了部分,那B<D>应该也是一个不完整的类,为什么就可以当作基类?[/quote] 模板类给上参数就是完整类型啊。
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
这时特殊的模板用法,有人称之为奇异递归模式。 我只在DriverStdio中的某些代码中见过,不知还有哪些时候这样用。
没什么特殊的,跟 class test: public vector<int> 差不多
lm_whales 2013-10-09
  • 打赏
  • 举报
回复
引用 8 楼 akirya 的回复:
[quote=引用 2 楼 lm_whales 的回复:] 这时特殊的模板用法,有人称之为奇异递归模式。 我只在DriverStdio中的某些代码中见过,不知还有哪些时候这样用。
没什么特殊的,跟 class test: public vector<int> 差不多[/quote] 不太一样吧int是内置类型,早定义过了。 这个模板虽然已经定义了,参数还正在定义呢,就被继承了。
dahaiI0 2013-09-27
  • 打赏
  • 举报
回复
引用 6 楼 healer_kx 的回复:
B不是一个类,是类模板,B<D>才是一个类。 WTL里面用这个主要实现静多态吧?
可是为什么D的定义还没完整或者说D只定义了部分,那B<D>应该也是一个不完整的类,为什么就可以当作基类?
healer_kx 2013-09-27
  • 打赏
  • 举报
回复
B不是一个类,是类模板,B<D>才是一个类。 WTL里面用这个主要实现静多态吧?
dahaiI0 2013-09-27
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
这时特殊的模板用法,有人称之为奇异递归模式。 我只在DriverStdio中的某些代码中见过,不知还有哪些时候这样用。
ATL/WTL里有很多,之前我都没看过,最近才开始看了点ATL方面的书,可实现编译期多态,奈何基础差看的费力
dahaiI0 2013-09-27
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
这是完整的类啊
不太懂,您是说public B1<D1>是完整的类吗?可是D1都还没有完全定义,为什么也是完整的类呢
ken_scott 2013-09-27
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
这时特殊的模板用法,有人称之为奇异递归模式。 我只在DriverStdio中的某些代码中见过,不知还有哪些时候这样用。
class B<T>:防止继承的类模板 class D : virtual B<D>:此时D也是不可继承的
lm_whales 2013-09-26
  • 打赏
  • 举报
回复
这时特殊的模板用法,有人称之为奇异递归模式。 我只在DriverStdio中的某些代码中见过,不知还有哪些时候这样用。
  • 打赏
  • 举报
回复
这是完整的类啊

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧