Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Данный класс позволяет отобразить типы данных в runtime числовые значения
- //
- // UniqueTag - это уникальный идентификатор отдельного индекса
- //
- // Внутри индекс для каждого типа хранится в статической локальной переменной шаблонного метода data<T>()
- // Счётчик кодируется так:
- // >=0 зарегистрирован
- // -1 не регистрировался
- template<typename UniqueTag> class TypeIndex
- {
- typedef TypeIndex<UniqueTag> _Index;
- public:
- // индекс типа, -1 если тип не регистрировался или был удалён
- template<typename T> static int get()
- {
- return singleton().data<T>();
- }
- // сообщить регистрировался тип данных в индексе или нет
- template<typename T> static bool valid()
- {
- return singleton().data<T>() != -1;
- }
- template<typename T> static int add()
- {
- int& value = singleton().data<T>();
- if (value == -1)
- // не встречался ранее - регистрируем
- value = singleton().m_Total++;
- return value;
- }
- static uint32_t size()
- {
- return singleton().m_Total;
- }
- private:
- static _Index& singleton()
- {
- static _Index sResult;
- return sResult;
- }
- uint32_t m_Total = 0;
- template<typename T> int& data() const
- {
- static int sResult = -1;
- return sResult;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement