# Poco

# template < class C, class N >

# class NObserver

Library: Foundation
Package: Notifications
Header: Poco/NObserver.h

## Description

This template class implements an adapter that sits between a NotificationCenter and an object receiving notifications from it. It is quite similar in concept to the RunnableAdapter, but provides some NotificationCenter specific additional methods. See the NotificationCenter class for information on how to use this template class.

This class template is quite similar to the Observer class template. The differences are:

- NObserver expects the callback function to accept a const AutoPtr& instead of a plain pointer as argument, thus simplifying memory management.

- In addition to dispatching notifications based on the Notification runtime type, NObserver can also notify subscribers based on the Notification name. To enable this functionality, a matcher function must be provided. Null matcher means no matching is performed and all notificiations of the type subscribed to are dispatched.

## Inheritance

Direct Base Classes: AbstractObserver

All Base Classes: AbstractObserver

## Member Summary

Member Functions: accepts, clone, disable, equals, handle, match, mutex, notify, operator =

Inherited Functions: accepts, backlog, clone, disable, equals, notify, operator =, start

## Types Aliases

### Callback

using Callback = void (C::*)(const NotificationPtr &);

### Handler

using Handler = Callback;

### Matcher

using Matcher = bool (C::*)(const std::string &)const;

### NotificationPtr

using NotificationPtr = AutoPtr < N >;

### Type

using Type = NObserver < C, N >;

## Constructors

### NObserver

NObserver() = delete;

### NObserver

NObserver(
const NObserver & observer
);

### NObserver

NObserver(
C & object,
Handler method,
Matcher matcher = nullptr
);

## Destructor

### ~NObserver

~NObserver();

## Member Functions

### accepts

virtual bool accepts(
Notification * pNf,
const char * pName
) const;

See also: Poco::AbstractObserver::accepts()

### accepts

virtual bool accepts(
const Notification::Ptr & pNf
) const;

See also: Poco::AbstractObserver::accepts()

### clone

virtual AbstractObserver * clone() const;

See also: Poco::AbstractObserver::clone()

### disable

virtual void disable();

See also: Poco::AbstractObserver::disable()

### equals

virtual bool equals(
const AbstractObserver & abstractObserver
) const;

See also: Poco::AbstractObserver::equals()

### notify

virtual void notify(
Notification * pNf
) const;

See also: Poco::AbstractObserver::notify()

### operator =

NObserver & operator = (
const NObserver & observer
);

### handle

void handle(
const NotificationPtr & ptr
) const;

### match

bool match(
const Notification::Ptr & ptr
) const;

### mutex

Mutex & mutex() const;