Если вы полностью упаковываете интерфейс, это упрощается.
Сначала New_API
регистрирует своего собственного слушателя на Old_API
, используя любые средства, которые Old_API
предлагает связать обратный вызов с этим экземпляром.из New_API
(может быть просто полем в Old_API
или, если оно недоступно, даже что-то вроде статического unordered_map<Old_API*, New_API*>
).
Тогда New_API
имеет свою собственную систему регистрации слушателей.(Вы показываете здесь указатели функций, но это думает C ... в худшем случае у вас должно быть что-то, что занимает std::function
.)
Когда New_API
получает свое уведомление, оно просто уведомляет свое собственноеслушатель (и) по очереди.Между слушателями нет прямого отображения: Old_API
будет иметь ровно одного слушателя, независимо от того, сколько слушателей на New_API
.