std::derived_from (自 C++20 起)
来自 cppreference.com
在头文件 <concepts> 中定义 |
||
template< class Derived, class Base > concept derived_from = |
(自 C++20 起) | |
概念 derived_from<Derived, Base> 仅当 Base
是一个类类型,并且它是 Derived
或 Derived
的一个公共且明确的基类时才满足,忽略 cv 限定符。
请注意,当 Base
是 Derived
的私有或受保护基类时,此行为与 std::is_base_of
不同。
[编辑] 示例
运行此代码
#include <concepts> class A {}; class B : public A {}; class C : private A {}; // std::derived_from == true only for public inheritance or exact same class static_assert(std::derived_from<B, B> == true); // same class: true static_assert(std::derived_from<int, int> == false); // same primitive type: false static_assert(std::derived_from<B, A> == true); // public inheritance: true static_assert(std::derived_from<C, A> == false); // private inheritance: false // std::is_base_of == true also for private inheritance static_assert(std::is_base_of_v<B, B> == true); // same class: true static_assert(std::is_base_of_v<int, int> == false); // same primitive type: false static_assert(std::is_base_of_v<A, B> == true); // public inheritance: true static_assert(std::is_base_of_v<A, C> == true); // private inheritance: true int main() {}
[编辑] 参考资料
- C++23 标准 (ISO/IEC 14882:2024)
- 18.4.3 概念
derived_from
[concept.derived]
- 18.4.3 概念
- C++20 标准 (ISO/IEC 14882:2020)
- 18.4.3 概念
derived_from
[concept.derived]
- 18.4.3 概念
[编辑] 另请参阅
(C++11) |
检查一个类型是否是另一个类型的基类 (类模板) |
(C++11)(C++20) |
检查一个类型是否可以转换为另一个类型 (类模板) |