Namensräume
Varianten
Aktionen

std::is_virtual_base_of

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
(C++11)
is_virtual_base_of
(C++26)
(C++11)
(C++11)
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class Base, class Derived >
struct is_virtual_base_of;
(seit C++26)

std::is_virtual_base_of ist ein BinaryTypeTrait.

Wenn Base eine virtuelle Basisklasse von Derived ist (wobei cv-Qualifizierer ignoriert werden), liefert es das Mitglied-Konstante value gleich true. Andernfalls ist value false.

Wenn sowohl Base als auch Derived nicht-Union-Klassentypen sind (wobei cv-Qualifizierer ignoriert werden), muss Derived ein vollständiger Typ sein; andernfalls ist das Verhalten undefiniert.

Wenn das Programm Spezialisierungen für std::is_virtual_base_of oder std::is_virtual_base_of_v hinzufügt, ist das Verhalten undefiniert.

Inhalt

[edit] Hilfsvariablen-Template

template< class Base, class Derived >
constexpr bool is_virtual_base_of_v = is_virtual_base_of<Base, Derived>::value;
(seit C++26)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn Derived von der virtuellen Basisklasse Base abgeleitet ist (wobei cv-Qualifizierer ignoriert werden), andernfalls false
(öffentliche statische Member-Konstante)

Memberfunktionen

operator bool
konvertiert das Objekt zu bool, gibt value zurück
(öffentliche Memberfunktion)
operator()
(C++14)
gibt value zurück
(öffentliche Memberfunktion)

Membertypen

Typ Definition
value_type bool
type std::integral_constant<bool, value>

[edit] Anmerkungen

std::is_virtual_base_of_v<A, B> ist true, auch wenn A eine private, geschützte oder mehrdeutige Basisklasse von B ist.

Wenn std::is_virtual_base_of_v<A, B> true ist, dann ist auch std::is_base_of_v<A, B> true. Die Umkehrung ist jedoch nicht immer wahr, da die Prüfung auf virtuelle Vererbung spezifischer ist. In diesem Fall ist std::is_virtual_base_of_v<T, T> false, auch wenn T ein nicht-Union-Klassentyp ist.

[edit] Beispiel

#include <type_traits>
 
class A {};
class B : A {};
class C : B {};
class D : virtual A {};
class E : D {};
 
union F {};
using I = int;
 
static_assert
(
    std::is_virtual_base_of_v<A, A> != true &&
    std::is_virtual_base_of_v<A, B> != true &&
    std::is_virtual_base_of_v<A, D> == true &&
    std::is_virtual_base_of_v<D, E> != true &&
    std::is_virtual_base_of_v<F, F> != true &&
    std::is_virtual_base_of_v<I, I> != true
);
 
int main() {}

[edit] Siehe auch

prüft, ob ein Typ eine Basisklasse des anderen Typs ist
(Klassenvorlage) [bearbeiten]
prüft, ob ein Typ in den anderen Typ konvertierbar ist
(Klassenvorlage) [bearbeiten]
gibt an, dass ein Typ von einem anderen Typ abgeleitet ist
(Konzept) [bearbeiten]