Spec-Zone.ru › C++

std::is_abstract

Определено в заголовке <type_traits>
template< class T >
struct is_abstract;
(с C++11)

std::is_abstract является UnaryTypeTrait.

Если T является абстрактным классом (то есть, не объединяющим классом, который объявляет или наследует как минимум одну чисто виртуальную функцию), предоставляет стальную константу value равную true. Для любого другого типа value равно false.

Если T является неполным типом не объеденяющего класса, поведение неопределено.

Поведение программы, добавляющей специализации для std::is_abstract или std::is_abstract_v неопределено.

Параметры шаблона

T - тип для проверки

Вспомогательный шаблон переменной

template< class T >
inline constexpr bool is_abstract_v = is_abstract<T>::value;
(с C++17)

Наследуется от std::integral_constant

Стальные константы

value
[static]
true если T является типом абстрактного класса, false в противном случае
(общедоступная стальная константа)

Члены-функции

operator bool
преобразует объект в bool, возвращает value
(общедоступная функция-член)
operator()
(C++14)
возвращает value
(общедоступная функция-член)

Типы-члены

Тип Определение
value_type bool
type std::integral_constant<bool, value>

Пример

#include <iostream>
#include <type_traits>
 
struct A { int m; };
static_assert(std::is_abstract_v<A> == false);
 
struct B { virtual void foo(); };
static_assert(std::is_abstract_v<B> == false);
 
struct C { virtual void foo() = 0; };
static_assert(std::is_abstract_v<C> == true);
 
struct D : C {};
static_assert(std::is_abstract_v<D> == true);
 
int main() {}

Отчеты об ошибках

Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применен к Поведение как опубликовано Правильное поведение
LWG 2015 C++11 поведение было неопределенным, если
T является неполным типом объединения
основная характеристика равна
std::false_type в данном случае

См. также

is_class
(C++11)
проверяет, является ли тип классом, отличным от объединения
(шаблон класса)
is_polymorphic
(C++11)
проверяет, является ли тип полиморфным классом
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_abstract

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API