std:: derived_from
|
Definiert im Header
<concepts>
|
||
|
template
<
class
Derived,
class
Base
>
concept derived_from
=
|
(seit C++20) | |
Das Konzept
derived_from
<
Derived, Base
>
ist genau dann erfüllt, wenn
Base
ein Klassentyp ist, der entweder
Derived
selbst oder eine öffentliche und eindeutige Basisklasse von
Derived
ist, wobei CV-Qualifizierer ignoriert werden.
Beachten Sie, dass sich dieses Verhalten von
std::is_base_of
unterscheidet, wenn
Base
eine private oder protected Basisklasse von
Derived
ist.
Beispiel
#include <concepts> class A {}; class B : public A {}; class C : private A {}; // std::derived_from == true nur bei öffentlicher Vererbung oder exakt derselben Klasse static_assert(std::derived_from<B, B> == true); // dieselbe Klasse: true static_assert(std::derived_from<int, int> == false); // derselbe primitive Typ: false static_assert(std::derived_from<B, A> == true); // öffentliche Vererbung: true static_assert(std::derived_from<C, A> == false); // private Vererbung: false // std::is_base_of == true auch bei privater Vererbung static_assert(std::is_base_of_v<B, B> == true); // dieselbe Klasse: true static_assert(std::is_base_of_v<int, int> == false); // derselbe primitive Typ: false static_assert(std::is_base_of_v<A, B> == true); // öffentliche Vererbung: true static_assert(std::is_base_of_v<A, C> == true); // private Vererbung: true int main() {}
Referenzen
- C++23-Standard (ISO/IEC 14882:2024):
-
-
18.4.3 Konzept
derived_from[concept.derived]
-
18.4.3 Konzept
- C++20-Standard (ISO/IEC 14882:2020):
-
-
18.4.3 Konzept
derived_from[concept.derived]
-
18.4.3 Konzept
Siehe auch
|
(C++11)
|
prüft, ob ein Typ eine Basis eines anderen Typs ist
(Klassentemplate) |
|
(C++11)
(C++20)
|
prüft, ob ein Typ in einen anderen Typ konvertiert werden kann
(Klassentemplate) |