All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
pimpl.hpp File Reference
`#include <uhd/config.hpp>`
`#include <boost/shared_ptr.hpp>`

Go to the source code of this file.

## Macros

#define | UHD_PIMPL_DECL(_name) struct _name; boost::shared_ptr<_name>
#define | UHD_PIMPL_MAKE(_name, _args) boost::shared_ptr<_name>(new _name _args)

## Detailed Description

"Pimpl idiom" (pointer to implementation idiom). The UHD_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

#define UHD_PIMPL_DECL | ( |  | _name | ) | struct _name; boost::shared_ptr<_name>

Make a declaration for a pimpl in a header file.

- Usage: UHD_PIMPL_DECL(impl) _impl;
  Parameters

    _name | the name of the pimpl class

#define UHD_PIMPL_MAKE | ( |  | _name,
|  |  | _args
| ) |  | boost::shared_ptr<_name>(new _name _args)

Make an instance of a pimpl in a source file.

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

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