0

私は、コンパイル時の仕組みに大きく依存するメッセージング システムを作成しました。メッセージを受信するには、次のようにクラス テンプレートから継承します。

class WorldRenderer : public fea::MessageReceiver<SpriteCreateMessage>,
                      public fea::MessageReceiver<SpritePositionMessage>,
                      public fea::MessageReceiver<SpriteMoveMessage>
{
public:
    void handleMessage(const SpriteCreateMessage& mess) override;
    void handleMessage(const SpritePositionMessage& mess) override;
    void handleMessage(const SpriteMoveMessage& mess) override;
};

マクロを使って、この表記をきちんと短縮する方法があるのではないかと考えていました。上記のマクロが使用されると私が想像する方法:

class WorldRenderer
FEA_IS_RECEIVER(SpriteCreateMessage, SpritePositionMessage, SpriteMoveMessage)
{
public:
    void handleMessage(const SpriteCreateMessage& mess) override;
    void handleMessage(const SpritePositionMessage& mess) override;
    void handleMessage(const SpriteMoveMessage& mess) override;
};

そのような FEA_IS_RECEIVER マクロを作成する方法はありますか?

可変引数マクロを調べましたが、特定の量のパラメーターごとに特定のマクロ オーバーロードを記述しない限り、それらを評価することはできないようです。このアプローチは機能しますが、サブスクライブできるメッセージの量が制限されます。

私がやろうとしていることを達成するためのきちんとした方法はありますか?

4

2 に答える 2