DG>Что хочется изменить, но я не вижу даже намека на решение: DG>1. Убрать регистрацию типов DG>2. Сделать автоматическую генерацию номера класса (я пытался это провернуть через адрес статической функции, но компилятор ругается, что этот адрес не является константой).
Средствами, допускаемыми текущим стандартом C++, сделать это невозможно. Объекту можно сопоставить только две вещи:
1) другой объект (возможно, другого типа) — за счёт применения к объекту функций или операторов;
2) интегральную константу — за счёт применения оператора sizeof.
Напрямую сопоставить произвольному объекту какой-либо тип нельзя. Из вышеперечисленного тип можно получить только на базе интегральной константы. Но закодировать тип уникальной константой, а затем ещё расшифровать, какой тип эта константа обозначает, можно только с использованием регистрации. Автоматизировать отображение типов в константы и обратно – констант в исходные типы – невозможно. Даже если бы удалось автоматизировать сопоставление типу константы посредством указателей на шаблонные функции (если бы из них можно было получать целые константы), обратное преобразование всё равно невыполнимо.