マクロ ( ) を定義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 のためにインデックスをメンバー自体に格納する
など、究極のパフォーマンスと柔軟性が本当に必要な場合に役立ちます。
読みました :-
- 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
。
マクロである種のテーブルを定義し、それを他のマクロに読み取らせることを検討しています。(ありえない?)