CRTP(奇异的递归模板模式)

举报
用户已注销 发表于 2021/11/30 08:16:18 2021/11/30
【摘要】 CRTP(Curiously Recurring Template Pattern),奇异的递归模板模式,指的是子类继承一个模板类,模板的特化类型是子类本身。 最简代码: #include<iostream>using namespace std; template<typename T>class Ba...

CRTP(Curiously Recurring Template Pattern),奇异的递归模板模式,指的是子类继承一个模板类,模板的特化类型是子类本身。

最简代码:


  
  1. #include<iostream>
  2. using namespace std;
  3. template<typename T>
  4. class Base
  5. {
  6. public:
  7. void virtualFunc()
  8. {
  9. static_cast<T*>(this)->realFunc();
  10. }
  11. };
  12. class Chird :public Base<Chird>
  13. {
  14. public:
  15. void realFunc()
  16. {
  17. cout << "real func";
  18. }
  19. };
  20. int main()
  21. {
  22. Chird().virtualFunc();
  23. return 0;
  24. }

这个简单的例子就能看出CRTP的写法,也能看出,其实本质上静态多态。

CRTP的好处是,静态多态比继承虚函数的动态多态要快。

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/121622654

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。