Если вы можете использовать RTTI,
typeid(*a1) == typeid(*a2)
Я думаю, вам также нужно
#include <typeinfo>
И у вас должна быть виртуальная функция в ваших классах, чтобы существовала виртуальная таблица:деструктор должен работать нормально.
ОБНОВЛЕНИЕ :
Я не уверен, что полностью понимаю, каковы ваши требования к группировке (Вам нужен какой-то детерминированный порядок?Что должно произойти с подклассами?), Но вы можете попробовать использовать значение , возвращаемое оператором typeid
, либо:
- Хешировать строку, возвращаемую из
typeid(*ptr).name()
- Используйте
typeid(*a1).before(typeid(*a2))
в качестве критерия порядка.Это не имеет никакого детерминизма между пробегами, все же.
Как правило, при рассмотрении RTTI неплохо было бы посмотреть, можно ли что-нибудь из этого сделать лучше, используя хорошо продуманные виртуальные функции (например, double dispatch ).Я действительно не могу сказать, есть ли хорошая альтернатива в вашем случае, так как я не понимаю специфику.