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