class EventListener
{
public:
virtual void onEvent (std::string message) = 0;
virtual void onEvent (std::string message, int eventCode) = 0;
};
class CustomEventListener : public EventListener
{
public:
void onEvent(std::string message) {};
void onEvent(std::string message, int eventCode) {}; // I want this to throw an error
};
我想這樣做是爲了覆蓋一個重載函數,排除用戶重寫另一個,可能會引發編譯時異常。這可能嗎 ?以相互排斥的方式覆蓋虛擬函數
我想在接口中保留兩個虛函數的原因是爲了保持與已經在其應用程序中廣泛使用第一個函數的用戶的向後兼容性,我不想強迫他們使用第二個更新的一。
使這兩個函數非純並不是一個真正的選擇,因爲我想強制用戶重寫其中的一個。
我的C++很生鏽:如果向兩者添加'= 0',我不認爲你可以讓任何一個未被實現,你能嗎?你怎麼知道哪一個被覆蓋,哪些在運行時可以安全地調用? – Rup
你怎麼知道用戶提供了哪一個?我敢肯定,你需要提供默認實現並調用兩者,所以如果用戶覆蓋既沒有不好的事情發生。此外,你只會因爲使這個純虛函數而產生仇恨,如果有人不想重寫'onEvent',那麼他們就不會得到這個事件,爲什麼強迫它們呢? – nwp
添加另一個純虛函數並不完全向後兼容。用戶需要實現它(甚至是微不足道的)並重新編譯它們的類。 – StoryTeller