std::derived_from
来自cppreference.com
在标头 <concepts> 定义
|
||
template< class Derived, class Base > concept derived_from = |
(C++20 起) | |
概念 derived_from<Derived, Base> 当且仅当忽略 cv 限定符后 Base
是类类型,且它为 Derived
或是 Derived
的公开无歧义基类才得到满足。
注意当 Base
是 Derived
的私有或受保护基类时,此行为异于 std::is_base_of
。
示例
运行此代码
#include <concepts> class A {}; class B: public A {}; class C: private A{}; int main() { // std::derived_from == true 仅对公有继承或完全相同的类(非基础类型)成立 static_assert( std::derived_from<B, B> == true ); // 相同的类: true static_assert( std::derived_from<int, int> == false ); // 相同的基础类型: false static_assert( std::derived_from<B, A> == true ); // 公有继承: true static_assert( std::derived_from<C, A> == false ); // 私有继承: false // std::is_base_of == true 对私有继承也成立,但仍对完全相同的基础类型不成立 static_assert( std::is_base_of_v<B, B> == true ); // 相同的类: true static_assert( std::is_base_of_v<int, int> == false ); // 相同的基础类型: false static_assert( std::is_base_of_v<A, B> == true ); // 公有继承: true static_assert( std::is_base_of_v<A, C> == true ); // 私有继承: true }
参阅
(C++11) |
检查一个类型是否派生自另一个类型 (类模板) |
(C++11)(C++20) |
检查是否能转换一个类型为另一类型 (类模板) |