Нет способа сделать это автоматически.Простой способ получить эффект состоит в том, чтобы каждый производный класс вызывал функцию своего базового класса:
class A
{
public:
static void Update(UINT someValue) {
std::cout << "A\n";
}
};
class B : public A
{
public:
static void Update(UINT someValue) {
A::Update(someValue);
std::cout << "B\n";
}
};
Если вы предпочитаете работать снизу вверх, вы можете заставить каждый класс выполнять свою работу до вызова производного класса.Конечно, ничто не мешает производному классу реализовать Update
и , а не , вызывая его базовый класс.Однако для класса нормально вообще не реализовывать Update
- он не заботится об обновлениях, но функция его базового класса все еще может быть вызвана.Так что это не большая нагрузка для разработчиков, они просто должны следовать правилу, что , если они реализуют функцию, они должны вызывать базу.
Другой способ может быть для базового класса.вести список «слушателей», которые заинтересованы в обновлениях, и вызывать их по очереди, когда происходит обновление.Каждый производный класс может затем зарегистрировать подходящего прослушивателя.
Может быть трудно сделать код, подобный этому, безопасным для исключений, однако, если каждый уровень вносит изменения, но один или несколько уровней могут выдавать.