std:: is_virtual_base_of
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовочном файле
<type_traits>
|
||
|
template
<
class
Base,
class
Derived
>
struct is_virtual_base_of ; |
(начиная с C++26) | |
std::is_virtual_base_of
является
BinaryTypeTrait
.
Если
Base
является
виртуальным базовым классом
для
Derived
(игнорируя cv-квалификаторы), предоставляет константу-член
value
равную
true
. В противном случае
value
равна
false
.
Если оба
Base
и
Derived
являются типами классов, не являющихся объединениями (игнорируя cv-квалификаторы),
Derived
должен быть
полным типом
; в противном случае поведение не определено.
Если программа добавляет специализации для
std::is_virtual_base_of
или
std::is_virtual_base_of_v
, поведение не определено.
Содержание |
Шаблон вспомогательной переменной
|
template
<
class
Base,
class
Derived
>
constexpr bool is_virtual_base_of_v = is_virtual_base_of < Base, Derived > :: value ; |
(начиная с C++26) | |
Унаследовано от std:: integral_constant
Константы-члены
|
value
[static]
|
true
если
Derived
наследуется от виртуального базового класса
Base
(игнорируя cv-квалификаторы),
false
в противном случае
(публичная статическая константа-член) |
Функции-члены
|
operator bool
|
преобразует объект в
bool
, возвращает
value
(публичная функция-член) |
|
operator()
(C++14)
|
возвращает
value
(публичная функция-член) |
Типы-члены
| Тип | Определение |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Примечания
std
::
is_virtual_base_of_v
<
A, B
>
имеет значение
true
даже если
A
является приватным, защищённым или неоднозначным базовым классом
B
.
Если
std
::
is_virtual_base_of_v
<
A, B
>
равно
true
, тогда
std::
is_base_of_v
<
A, B
>
также равно
true
. Однако обратное не всегда верно, поскольку проверка виртуального наследования является более специфичной. В этом случае,
std
::
is_virtual_base_of_v
<
T, T
>
равно
false
даже если
T
является не-объединенным классом.
Пример
#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() {}
Смотрите также
|
(C++11)
|
проверяет, является ли тип базовым для другого типа
(шаблон класса) |
|
(C++11)
(C++20)
|
проверяет, может ли тип быть преобразован в другой тип
(шаблон класса) |
|
(C++20)
|
указывает, что тип является производным от другого типа
(концепт) |