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
lang/cpp/motscles.txt · Dernière modification : 2019/12/18 22:46 de root