@Anthony228357

Как избавиться от вызовов функций, которые ничего не делают?

Есть класс обработчик событий окна:
class EventHandler
{
private:
	std::vector<EventReciver*> recievers;

public:
	EventHandler(GLFWwindow* window);
	inline void add_reciever(EventReciver* rec) { recievers.push_back(rec); };

	void resize_callback(int width, int height)
{
    for (size_t i = 0; i < recievers.size(); i++)
    {
        recievers[i]->resize_callback(width,height);
    };
};

void key_callback(int key, int scancode, int action, int mode)
{
	for (size_t i = 0; i < recievers.size(); i++)
	{
		recievers[i]->key_callback(key, scancode,action,mode);
	};
};

	~EventHandler();
};

Для того , чтобы класс мог получать сообщения, он должен наследоваться от базового класса EventReciever:
class EventReciver
{
public: 
	inline EventReciver() {};
private:
	
	void virtual resize_callback(int width, int height) {};
	void virtual key_callback(int key, int scancode, int action, int mode) {};
	friend class EventHandler;
};

При этом я хочу сделать так, чтобы класс-наследник мог получать сообщения только на определенные события и переопределять только нужные функции.
Например:
class A : public EventReciver
{
public:
private:
	void resize_callback(int width, int height) override { ... };
};
class B : public EventReciver
{
public:
private:
	void key_callback(int width, int height) override { ... };
};

При такой реализации будут вызываться функции , которые ничего не делают. Как этого избежать?
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vabka
Токсичный
При такой реализации будут вызываться функции , которые ничего не делают. Как этого избежать

Следовать SRP и не пихать 100500 функций, которые не имеют друг к другу отношения в один абстрактный класс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы