197 votes

typeid et typeof en C++

Je me demande juste quelle est la différence entre typeid et typeof en C++ ?

typeid est défini dans le fichier d'en-tête standard de la bibliothèque C++ typeinfo.

typeof est défini dans l'extension GCC pour C ou en C++. Boost bibliothèque.


mettre à jour :

Merci !

le code de test suivant pour typeid ne donne pas le nom correct du type. quel est le problème ?

 //main.cpp 
 #include <iostream>  
 #include <typeinfo>  //for 'typeid' to work  

 class Person {  
 public:  
    // ... Person members ...  
    virtual ~Person() {}  
 };  

 class Employee : public Person {  
    // ... Employee members ...  
 };  

 int main () {  
    Person person;  
    Employee employee;  
    Person *ptr = &employee;  
    int t = 3;  

    std::cout << typeid(t).name() << std::endl;  
    std::cout << typeid(person).name() << std::endl;   // Person (statically known at compile-time)  
    std::cout << typeid(employee).name() << std::endl; // Employee (statically known at compile-time)  
    std::cout << typeid(ptr).name() << std::endl;      // Person * (statically known at compile-time)  
    std::cout << typeid(*ptr).name() << std::endl;     // Employee (looked up dynamically at run-time  
                                             // because it is the dereference of a pointer to a polymorphic class)  
 }  

sortie :

bash-3.2$ g++ -Wall main.cpp -o main  
bash-3.2$ ./main   
i  
6Person  
8Employee  
P6Person  
8Employee

3voto

Patrick K Points 76

Vous pouvez utiliser Boost demangle pour obtenir un nom agréable à lire :

#include <boost/units/detail/utility.hpp>

et quelque chose comme

To_main_msg_evt ev("Failed to initialize cards in " + boost::units::detail::demangle(typeid(*_IO_card.get()).name()) + ".\n", true, this);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X