您提供的代码片段在 C 中实现了 is_base_of 特征,它检查一个类是否从另一个类继承。它使用一种称为“奇怪的重复模板模式”(CRTP)的技术。
Host 是一个模板类,它包装派生类并提供访问其运算符 B* 的方法功能。当我们想要检查 B 是否是 D 的基类时,我们调用 is_base_of::value。
检查函数重载了两个函数:
运算符B* 必须是 const,否则在选择调用哪个检查函数时会产生歧义。通过 const 关键字,编译器知道使用接受 B* const& 的检查函数。
第一个检查函数更好,因为它使用了用户- 定义从 D* 转换为 B* 的转换序列。这比第二个检查函数更具体,后者使用用户定义的转换序列从 B* 转换为 int。
以上是使用 CRTP 的 C `is_base_of` 实现如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!