====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 #include #include class A { public: virtual bool test(A & aa) { return typeid(aa) == typeid(*this); } ~A() { static_assert(std::is_polymorphic::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 [[https://stackoverflow.com/questions/41389968/ensuring-a-template-class-isnt-polymorphic|Ensuring a template class isn't polymorphic?]] {{ lang:cpp:motscles:c_-_ensuring_a_template_class_isn_t_polymorphic_-_stack_overflow_2019-12-18_21_18_13_.html |Archive du 30/12/2016 le 18/12/2019}} [[https://stackoverflow.com/questions/17010884/typeid-for-polymorphic-pointers|typeid for polymorphic pointers?]] {{ lang:cpp:motscles:c_-_typeid_for_polymorphic_pointers_-_stack_overflow_2019-12-18_21_18_21_.html |Archive du 09/06/2013 le 18/12/2019}} [[https://en.cppreference.com/w/cpp/language/typeid|typeid operator]] {{ lang:cpp:motscles:typeid_operator_-_cppreference.com_2019-12-18_21_18_36_.html |Archive du 13/01/2019 le 18/12/2019}}