std:: derived_from
|
定义于头文件
<concepts>
|
||
|
template
<
class
Derived,
class
Base
>
concept derived_from
=
|
(C++20 起) | |
当且仅当
Base
是
Derived
类型本身,或是
Derived
的公开且无歧义基类(忽略 cv 限定符)时,概念
derived_from
<
Derived, Base
>
即得到满足。
请注意,当
Base
是
Derived
的私有或受保护基类时,此行为与
std::is_base_of
有所不同。
示例
#include <concepts> class A {}; class B : public A {}; class C : private A {}; // 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 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)
|
检查一个类型是否能转换为另一个类型
(类模板) |