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