std::type_info::operator==, std::type_info::operator!=
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (1) | ||
bool operator==( const type_info& rhs ) const; |
(до C++11) | |
bool operator==( const type_info& rhs ) const noexcept; |
(начиная с C++11) (до C++23) |
|
constexpr bool operator==( const type_info& rhs ) const noexcept; |
(начиная с C++23) | |
| (2) | ||
bool operator!=( const type_info& rhs ) const; |
(до C++11) | |
bool operator!=( const type_info& rhs ) const noexcept; |
(начиная с C++11) (до C++20) |
|
Проверяет, относятся ли объекты к одним и тем же типам.
|
Оператор |
(начиная с C++20) |
Параметры
| rhs | — | информационный объект другого типа для сравнения |
Возвращаемое значение
true, если операция сравнения верна, иначе false
Примечание
| Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
|---|---|---|---|
__cpp_lib_constexpr_typeinfo |
202106L |
(C++23) | Constexpr для std::type_info::operator==
|
Пример
Запустить этот код
#include <iostream>
#include <typeinfo>
#include <string>
#include <utility>
class person
{
public:
explicit person(std::string n) : name_(std::move(n)) {}
virtual const std::string& name() const{ return name_; }
private:
std::string name_;
};
class employee : public person
{
public:
employee(std::string n, std::string p)
: person(std::move(n)), profession_(std::move(p)) {}
const std::string& profession() const { return profession_; }
private:
std::string profession_;
};
void print_info(const person& p)
{
if(typeid(person) == typeid(p))
{
std::cout << p.name() << " не является сотрудником\n";
}
else if(typeid(employee) == typeid(p))
{
std::cout << p.name() << " является сотрудником ";
auto& emp = dynamic_cast<const employee&>(p);
std::cout << ", который работает в отделе " << emp.profession() << '\n';
}
}
int main()
{
print_info(employee{"Павел", "Экономика"});
print_info(person{"Катя"});
#if __cpp_lib_constexpr_typeinfo
if constexpr (typeid(employee) != typeid(person)) // C++23
std::cout << "класс `employee` != класс `person`\n";
#endif
}
Возможный вывод:
Павел является сотрудником, который работает в отделе Экономика
Катя не является сотрудником
класс `employee` != класс `person`
Смотрите также
проверяет, предшествует ли указанный тип другому объекту type_info,в порядке, определённом реализацией, т.е. упорядочивает указанные типы (public функция-элемент) |