Outils pour utilisateurs

Outils du site


lang:cpp:motscles

Ceci est une ancienne révision du document !


Prototypes correspondant à un même appel

Soit les prototypes

void fn (int i, int j);
void fn (int i, int ...);

Dans le cas de l'appel à la fonction fn (1, 2), la fonction ayant le prototype exact sera appelé (soit void fn (int i, int j))

Mots clés

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.1576705474.txt.gz · Dernière modification : 2019/12/18 22:44 de root