Если вы считаете, что объект Notifier не является частью объекта Model, которому он принадлежит, так что изменение Notifier не «считается» как изменение Model, тогда сделайте getNotifier const-методом, возвращающим неконстантную ссылку:
Notifier& GetNotifier() const //Is const but returns a non-const
{ //reference to allow Observers to
//register themselves.
return m_Notifier;
}
Затем вам придется либо пометить m_Notifier как изменяемый, либо владеть им по указателю (или умному указателю) или по ссылке, а не по включению. В любом случае, вы избегаете const_cast. Обычно предпочтительнее встраивать объекты, чем указывать / ссылаться на них, но если это тот случай, когда средство оповещения не считается частью модели, которая его использует, то встраивание не является обязательным. Владение им по ссылке заставляет вас инициализировать ссылку при построении модели, что приводит к внедрению зависимости, что не так уж и плохо. Владение умным указателем означает, что, как и при встраивании, вам не нужно ничего делать для очистки.
Могут быть и другие способы разработки вещей (например, добавление Vinay другого класса), но ваш комментарий «Неконстантный, потому что он должен возвращать неконстантную ссылку», подсказывает мне, что вы можете делать именно то, что изначально хотел, ты просто не понимаешь, что можешь.