Использование шаблона Observer.У меня есть класс, который называется Monitor, например, который контролирует набор объектов.Класс является Обозревателем, и каждый объект в его коллекции является Предметом.В настоящее время коллекция реализована в виде std :: list of shared_ptr.В методе Update класса Monitor я хочу проверить, идет ли обновление от одного из объектов в его коллекции.
std::list<SomeSharedPointer> items_;
...
void Monitor::Update(Subject *subject)
{
if(subject == something_)
{
DoSomething();
}
else if
??
// if subject is one of the objects in our collection then do something..
}
Предметом здесь является необработанный указатель, а моей коллекцией является список shared_ptr.Как я могу эффективно проверить, является ли входящий объект одним из объектов в моей коллекции?
(Обратите внимание, что мой компилятор, msvc, поддерживает лямбды, если есть алгоритмическое решение, требующее его)
ОБНОВЛЕНИЕ
Я должен добавить, что я понимаю, что могу использовать цикл for над контейнером, но мне интересно, есть ли более причудливый способ.
ОБНОВЛЕНИЕ2
SomeSharedPointer
- это typedef для std::shared_ptr<SomeType>
, где SomeType
происходит от абстрактного класса Subject
(стандартная реализация шаблона Observer).SomeType в какой-то момент вызовет Notify()
, что вызовет метод Update()
для каждого наблюдателя.