Справочная информация:
Я пытаюсь создать реестр объектов, но каждый объект имеет определенное значение, например, параметр int.
template<int Parameter>
class SomeObject
{
// things
}
Я создал макрос для регистрации их
#define REGERISTER_OBJECT(PREFIX,OBJECT)\
class reg_##PREFIX\
{\
template<int Parameter>\
using Name = OBJECT\
template<int Parameter>\
void Register()\
{\
ObjectRegistry<Parameter>::Register<Name>();\
}
, где ObjectRegistry<Pameter>
- это просто шаблонная версия https://www.bfilipek.com/2018/02/factory-selfregister.html
Теперь дело в том, что я хочу создать реестр только для конкретных c параметры. (Обратите внимание, мы можем предположить, что Параметр будет принимать только одно значение (например, 1,2,3). Однако в любом проекте мне понадобится только одно из них.)
Каждое раз я пытаюсь сделать эту работу. Я сталкиваюсь с одной из трех проблем:
- Ничего не создается, а реестр пуст.
- Все создается, и для компиляции требуется абсурдное требование к памяти.
- I требуется функция виртуального шаблона (если вы пытаетесь получить reg _ ## PREFIX из некоторого базового класса) и ничего не компилируется.
Вопрос:
Лучший способ сделать эту работу - если бы был способ написать макрос наподобие этого:
#define REGERISTER_OBJECT(PREFIX,OBJECT)\
class reg_##PREFIX\
{\
using Previos = CLASS_CREATED_LAST_TIME_THIS_MACRO_WAS_INVOKED;
template<int Parameter>\
using Name = OBJECT\
}
Я мог бы создать рекурсивную функцию, чтобы потом все регистрировать. (Я верю.) Однако, похоже, нет способа хранить данные из последнего вызова (т.е. в #define). Есть ли способ обойти это?