使用 CRTP 的 C `is_base_of` 实现如何工作?
is_base_of 特征的这种实现是如何工作的?
您提供的代码片段在 C 中实现了 is_base_of 特征,它检查一个类是否从另一个类继承。它使用一种称为“奇怪的重复模板模式”(CRTP)的技术。
它是如何工作的
Host 是一个模板类,它包装派生类并提供访问其运算符 B* 的方法功能。当我们想要检查 B 是否是 D 的基类时,我们调用 is_base_of::value。
-
检查函数重载了两个函数:
- 静态是检查(D*, T)
- 静态否检查(B*, int)
- 主机由于用户定义的转换序列,可以转换为 D* 和 B*。
- 如果 B 是 D 的基数,则使用 Host 调用第一个检查函数。转换为 D* 和任意 T。如果转换成功(即 D 继承自 B),检查函数返回 yes。
- 如果 B 不是 D 的基,则调用第二个检查函数与主机转换为 B* 并指定 int 的值。如果转换为 B* 成功(即 B 和 D 不相关),则检查函数返回 no。如果检查函数返回 a,则
- is_base_of::value 设置为 true yes,否则为 false。
运算符 B* 中 const 关键字的重要性
运算符B* 必须是 const,否则在选择调用哪个检查函数时会产生歧义。通过 const 关键字,编译器知道使用接受 B* const& 的检查函数。
为什么第一个检查函数更好?
第一个检查函数更好,因为它使用了用户- 定义从 D* 转换为 B* 的转换序列。这比第二个检查函数更具体,后者使用用户定义的转换序列从 B* 转换为 int。
以上是使用 CRTP 的 C `is_base_of` 实现如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前
By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保护它?
3 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)