Namespaces
Variants

std:: is_virtual_base_of

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
(C++11)
is_virtual_base_of
(C++26)
(C++11)
(C++11)
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Défini dans l'en-tête <type_traits>
template < class Base, class Derived >
struct is_virtual_base_of ;
(depuis C++26)

std::is_virtual_base_of est un BinaryTypeTrait .

Si Base est une classe de base virtuelle de Derived (en ignorant les qualifications cv), fournit la constante membre value égale à true . Sinon value est false .

Si les deux Base et Derived sont des types de classe non-union (en ignorant les qualifications cv), Derived doit être un type complet ; sinon le comportement est indéfini.

Si le programme ajoute des spécialisations pour std::is_virtual_base_of ou std::is_virtual_base_of_v , le comportement est indéfini.

Table des matières

Modèle de variable d'assistance

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

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si Derived est dérivé de la classe de base virtuelle Base (en ignorant les qualifications cv), false sinon
(constante membre publique statique)

Fonctions membres

operator bool
convertit l'objet en bool , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type bool
type std:: integral_constant < bool , value >

Notes

std :: is_virtual_base_of_v < A, B > est true même si A est une classe de base privée, protégée ou ambiguë de B .

Si std :: is_virtual_base_of_v < A, B > est true , alors std:: is_base_of_v < A, B > est également true . Cependant, la réciproque n'est pas toujours vraie car la vérification de l'héritage virtuel est plus spécifique. Dans ce cas, std :: is_virtual_base_of_v < T, T > est false même si T est un type classe non-union.

Exemple

#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() {}

Voir aussi

(C++11)
vérifie si un type est une base d'un autre type
(modèle de classe)
vérifie si un type peut être converti en un autre type
(modèle de classe)
spécifie qu'un type est dérivé d'un autre type
(concept)