pimpl.h File Reference
`#include <memory>`
Include dependency graph for pimpl.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Macros

#define | OSMOSDR_PIMPL_DECL(_name) struct _name; std::shared_ptr<_name>
#define | OSMOSDR_PIMPL_MAKE(_name, _args) std::shared_ptr<_name>(new _name _args)

## Detailed Description

"Pimpl idiom" (pointer to implementation idiom). The OSMOSDR_PIMPL_* macros simplify code overhead for declaring and making pimpls.

Each pimpl is implemented as a shared pointer to the implementation:

- The container class will not have to deallocate the pimpl.
- The container class will use the pimpl as a regular pointer.
- Usage: _impl->method(arg0, arg1)
- Usage: _impl->member = value;

See also
  http://en.wikipedia.org/wiki/Opaque_pointer

## Macro Definition Documentation

## OSMOSDR_PIMPL_DECL

#define OSMOSDR_PIMPL_DECL | ( |  | _name | ) | struct _name; std::shared_ptr<_name>

Make a declaration for a pimpl in a header file.

- Usage: OSMOSDR_PIMPL_DECL(impl) _impl;
  Parameters

    _name | the name of the pimpl class

## OSMOSDR_PIMPL_MAKE

#define OSMOSDR_PIMPL_MAKE | ( |  | _name,
|  |  | _args
| ) |  | std::shared_ptr<_name>(new _name _args)

Make an instance of a pimpl in a source file.

- Usage: _impl = OSMOSDR_PIMPL_MAKE(impl, ());
- Usage: _impl = OSMOSDR_PIMPL_MAKE(impl, (a0, a1));
  Parameters

    _name | the name of the pimpl class
    _args | the constructor args for the pimpl