我寫了一個消息系統,它依賴於編譯時機制。要接收郵件,您從一個類繼承模板,像這樣:是否可以使用可變宏來聲明多重繼承?
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宏?
我已經研究了可變宏,但似乎不可能評估它們,除非您爲每個特定數量的參數編寫特定的宏重載。這種方法可行,但會限制您可以訂閱的消息數量。
是否有一個完美的方式來實現我想要做的事情?
這將是一個可能的最終用戶的解決方案,但我的信息系統是不知道哪個消息類型將通過用戶定義庫中的一部分,我正在尋找一個宏包括在圖書館。但是,無論如何感謝 – Tobias
@Tobias:看看Boost.Preprocessor,它有一些相當先進的東西。 –