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
헤더 파일에 정의됨 <type_traits>
template < class Base, class Derived >
struct is_virtual_base_of ;
(C++26부터)

std::is_virtual_base_of BinaryTypeTrait 입니다.

만약 Base virtual base class 인 경우 Derived 의 (cv-qualification은 무시하고), 멤버 상수 value true 로 제공합니다. 그렇지 않으면 value false 입니다.

만약 Base Derived 가 모두 non-union 클래스 타입인 경우(cv-qualification 무시), Derived 완전한 타입(complete type) 이어야 합니다; 그렇지 않으면 동작은 정의되지 않습니다.

프로그램이 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 그렇지 않은 경우
(public static member constant)

멤버 함수

operator bool
객체를 bool 로 변환, value 반환
(public member function)
operator()
(C++14)
value 반환
(public member function)

멤버 타입

타입 정의
value_type bool
type std:: integral_constant < bool , value >

참고 사항

std :: is_virtual_base_of_v < A, B > A B 의 private, protected, 또는 모호한(ambiguous) 기본 클래스인 경우에도 true 입니다.

만약 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)
한 타입이 다른 타입의 기반인지 검사합니다
(클래스 템플릿)
한 타입이 다른 타입으로 변환 가능한지 검사합니다
(클래스 템플릿)
한 타입이 다른 타입으로부터 파생되었음을 명시합니다
(컨셉트)