Статический член данных, который инициализируется с помощью алгоритма, который использует счетчик?Затем используйте MyClass :: id в качестве уникального идентификатора.А затем используйте виртуальные функции для получения уникального идентификатора на основе базового класса.Гарантируется, что она переносима, но требует небольшого бремени обслуживания, поскольку вам необходимо реализовать как статическую переменную, так и виртуальную функцию для каждого нового создаваемого вами класса.Но, думаю, это не большая проблема, поскольку вы уже решили использовать c ++, который, как известно, многословен.Это будет выглядеть так:
class Base { virtual int get_id() const=0; };
class Derived : public Base { static int id; int get_id() const { return id; } };
int algo() { static int count=0; count++; return count; }
static int Derived::id = algo();