相关文章推荐
愉快的匕首  ·  使用错误未识别的仿真模式构建Android内 ...·  1 年前    · 
性感的板凳  ·  wpf listview 点击事件-掘金·  1 年前    · 
高兴的丝瓜  ·  java 修改excel ...·  2 年前    · 
追风的小马驹  ·  java - IO Error: The ...·  2 年前    · 
奔放的蜡烛  ·  left join 一对多 数据重复-掘金·  2 年前    · 
Code  ›  C++的CRTP所带来的静态多态功能具体有什么用? - CrackingOysters 的回答 -
c++ 多态
https://www.zhihu.com/question/332147621/answer/2406310838
曾深爱过的乒乓球
2 年前
C++的CRTP所带来的静态多态功能具体有什么用?
CrackingOysters
CrackingOysters

最近看到一篇C++ 好文,推荐给大家。如果可以阅读英文,可以直接阅读原文 https://www. drdobbs.com/cpp/countin g-objects-in-c/184403484

“Counting Objects in C++",这技法被用于智能指针的enable_shared_from_this

当我们希望可以从一个指针获得它的shared_ptr, 的时候,我们需要将这个对象继承自enable_shared_from_this,

class Book: public std::enable_shared_from_this<Book> {
public:
  shared_ptr<Book> shared_this() {
    return std::shared_from_this();


刚开始看这个感觉有点难理解——为什么Book可直接继承 enable_shared_from_this<Book> ?

Book 这时候不是还没有定义好, 应该属于incomplete type呀。
后面才知道这样用法叫CRTP,curiously recurring template pattern。(个人觉得这个名字起的不好,不能让人见名思义)

首先提一下incomplete type。

incomplete type常出现于forward declaration。比如

class Book;
Book *ip = nullptr;
Book *ip_fail = new Book() //这一行会报错, Book 是incomplete type。
 
推荐文章
愉快的匕首  ·  使用错误未识别的仿真模式构建Android内核ld vdso32 : armelf_linux_eabi-腾讯云开发者社区-腾讯云
1 年前
性感的板凳  ·  wpf listview 点击事件-掘金
1 年前
高兴的丝瓜  ·  java 修改excel java修改excel图表坐标轴_ghpsyn的技术博客_51CTO博客
2 年前
追风的小马驹  ·  java - IO Error: The Network Adapter could not establish the connection when running oracle DB as do
2 年前
奔放的蜡烛  ·  left join 一对多 数据重复-掘金
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号