Один #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.
Я прочитал:-
- Создание списка строк и списка enum из макроса C++
Это слишком просто. - Как я могу сгенерировать список через препроцессор C (cpp)?
SINGLE_CASE
(FUNCTION_TABLE
в решении) содержит код, а мой нет.
Я не уверен x-macros
тег соответствующий.
(У меня ограниченные знания в этой области.)
Мой прогресс
#define SINGLE_CASE( ClassName, slotX) /
template<class T> Sloter<ClassName> : public GameObject { /
public: int slotX; /
};
Я до сих пор не знаю, как заставить его поддерживать многих slot
для того же класса или кода ALL_SWITCH
,
Я рассматриваю определение некоторых видов таблиц в макросе, а затем заставляю другие макросы читать их. (невозможно?)