std::type_info:: name
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
| Member functions | ||||
|
(until C++20)
|
||||
|
(C++11)
|
||||
|
type_info::name
|
|
const
char
*
name
(
)
const
;
|
(noexcept depuis C++11) | |
Retourne une chaîne de caractères terminée par un caractère nul, définie par l'implémentation, contenant le nom du type. Aucune garantie n'est donnée ; en particulier, la chaîne retournée peut être identique pour plusieurs types et changer entre différentes invocations du même programme.
Table des matières |
Paramètres
(aucun)
Valeur de retour
Chaîne de caractères terminée par un caractère nul contenant le nom du type.
Notes
La durée de vie du tableau pointé par le pointeur retourné n'est pas spécifiée, mais en pratique il persiste tant que la structure de données RTTI pour le type donné existe, qui a la durée de vie de l'application à moins d'être chargée depuis une bibliothèque dynamique (qui peut être déchargée).
Certaines implémentations (comme MSVC, IBM, Oracle) produisent un nom de type lisible par l'humain. D'autres, notamment gcc et clang, retournent le nom manglé, qui est spécifié par l'
Itanium C++ ABI
. Le nom manglé peut être converti en forme lisible par l'humain en utilisant des API spécifiques à l'implémentation telles que
abi::__cxa_demangle
directement ou via
boost::core::demangle
. Il peut également être traité via l'utilitaire en ligne de commande
c
++
filt
-
t
.
Exemple
#include <boost/core/demangle.hpp> #include <cstdlib> #include <iostream> #include <string> #include <typeinfo> struct Base { virtual ~Base() = default; }; struct Derived : Base {}; int main() { Base b1; Derived d1; const Base* pb = &b1; std::cout << typeid(*pb).name() << '\n'; pb = &d1; std::cout << typeid(*pb).name() << '\n'; std::string real_name = boost::core::demangle(typeid(pb).name()); std::cout << typeid(pb).name() << " => " << real_name << '\n'; std::cout << "c++filt => " << std::flush; std::string s = typeid(pb).name(); std::system(("c++filt -t " + s).data()); }
Sortie possible :
// GCC/Clang: 4Base 7Derived PK4Base => Base const* c++filt => Base const* // MSVC: struct Base struct Derived struct Base const * __ptr64 => struct Base const * __ptr64
Voir aussi
|
(C++11)
|
retourne une valeur identique pour les mêmes types
(fonction membre publique) |