Один #macro добавить поле и регистр (в switch-case)

Как определить макрос (ALL_SWITCH) распознать другой макрос (SINGLE_CASE) вхождения в виде списка, и вставьте коды в 2 разных местах?

Является ли это возможным?

пример

Я хочу создать макрос, синтаксис которого примерно такой:

 SINGLE_CASE <Class Name> <Enum slot>  //add fields
 ALL_SWITCH              //recognize all calling SINGLE_CASE (see below)

Ниже ожидаемое использование.

TopHeader.h:-

 SINGLE_CASE Machine slot1
 SINGLE_CASE Machine slot2
 //^-------- will be replaced by below code (generate the whole class)
 template<class T> Sloter<Machine> : public GameObject {
     public: int slot1;  
     public: int slot2;          
 };

 SINGLE_CASE Turret slot3
 //^-------- will be replaced by below code 
 template<class T> Sloter<Turret>  : public GameObject {
     public: int slot3;            
 };

Manager.h:-

 class Manager{
     enum SlotX{ slot1,slot2,slot3 };
     public: int* provider(GameObject* gameObject, SlotX slotX){
         switch(slotX){
             ALL_SWITCH 
             //^---- will be replaced by below code (add only cases)
             case slot1:{ 
                 return &(static_cast<Machine*>(gameObject)->slot1); 
             }break;
             case slot2:{ 
                 return &(static_cast<Machine*>(gameObject)->slot2); 
             }break;
             case slot3:{ 
                 return &(static_cast< Turret*>(gameObject)->slot3); 
             }break;
         }
     }
 };

Это не очень хороший дизайн, но это простой пример MACRO может сделать что-то совокупное.

Эта функция полезна, когда я действительно хочу максимальной производительности и гибкости,
например, хранить индекс в самом члене для чрезвычайно быстрого hashMap.

Я прочитал:-

Я не уверен x-macros тег соответствующий.
(У меня ограниченные знания в этой области.)

Мой прогресс

#define SINGLE_CASE( ClassName, slotX) /
template<class T> Sloter<ClassName> : public GameObject { /
     public: int slotX;  /
};

Я до сих пор не знаю, как заставить его поддерживать многих slot для того же класса или кода ALL_SWITCH,
Я рассматриваю определение некоторых видов таблиц в макросе, а затем заставляю другие макросы читать их. (невозможно?)

0 ответов

Другие вопросы по тегам