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