1

マクロ ( ) を定義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
マクロである種のテーブルを定義し、それを他のマクロに読み取らせることを検討しています。(ありえない?)

4

0 に答える 0