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