我為不同的偵聽器提供了許多介面,全部如下所示:
class ListenerA
{
public:
virtual void
onEventA(const EventA&) = 0;
};
class ListenerB
{
public:
virtual void
onEventB(const EventB&) = 0;
};
在測驗時,我總是最終只是將這些事件收集到 a 中std::vector,然后在特定的測驗套件中分析它們。例如,這些事件收集器看起來都一樣:
class EventACollector : public ListenerA
{
public:
const auto&
events() const
{
return m_events;
}
private:
void
onEventA(const EventA& event) override
{
m_events.emplace_back(event);
}
std::vector<EventA> m_events;
};
有沒有辦法模板一個 EventTColector,這樣我就不必每次都寫它?鑒于虛擬函式名稱確實為每個偵聽器更改?
uj5u.com熱心網友回復:
C 沒有自省,所以你virtual在ListenerA. 其他部分可以放在模板化的基類中,但您需要手動定義覆寫。
現代 C 會使用 astd::function<void(EventA)>而不是命名介面,但這對您作為舊介面的用戶沒有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371197.html
下一篇:無法向特定頻道發送訊息
