Outils pour utilisateurs

Outils du site


lang:cpp:motscles

typeid

typeid marche avec l'héritage si la classe est polymorphique (au moins une méthode est virtuelle) et ne marche pas avec les pointeurs (il faut utiliser une référence à la place)

#include <iostream>
#include <typeinfo>
#include <type_traits>
 
class A
{
 public:
  virtual bool test(A & aa)
  {
    return typeid(aa) == typeid(*this);
  }
  ~A()
  {
    static_assert(std::is_polymorphic<A>::value,
      "typeid ne marchera avec les enfants que si la classe A est polymorphique.");
  }
};
 
class B : public A
{
};
 
class C : public A
{
};
 
 
int main()
{ 
  B b;
  C c;
 
  if (b.test(c)) 
    std::cout << "Identique" << std::endl;
  else
    std::cout << "Pas identique" << std::endl;
  return 0;
}

Résultat :

Pas identique

Ensuring a template class isn't polymorphic? Archive du 30/12/2016 le 18/12/2019

typeid for polymorphic pointers? Archive du 09/06/2013 le 18/12/2019

typeid operator Archive du 13/01/2019 le 18/12/2019

lang/cpp/motscles.txt · Dernière modification : 2019/12/18 22:46 de root