std::derived_from
来自 cppreference.cn
定义于头文件 <concepts> |
||
template< class Derived, class Base > concept derived_from = |
(since 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]
- C++20 标准 (ISO/IEC 14882:2020)
- 18.4.3 概念 derived_from [concept.derived]
[编辑] 参见
(C++11) |
检查一个类型是否为另一个类型的基类 (类模板) |
(C++11)(C++20) |
检查一个类型是否可以转换为另一个类型 (类模板) |