我编写了一个消息传递系统,它在很大程度上依赖于编译时机制。要接收消息,您可以从类模板继承,如下所示:
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 宏?
我研究了可变参数宏,但似乎无法评估它们,除非您为每个特定数量的参数编写特定的宏重载。这种方法可行,但会限制您可以订阅的消息数量。
有没有一种巧妙的方法来实现我想要做的事情?