From: guigues Date: Tue, 9 Jun 2009 08:34:38 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: EED.02Oct2009~30 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=0dbcd77912fb4131c2efdb5951525f2d0db27529;p=bbtk.git *** empty log message *** --- diff --git a/kernel/src/bbtkPimpl.h b/kernel/src/bbtkPimpl.h new file mode 100644 index 0000000..68c725a --- /dev/null +++ b/kernel/src/bbtkPimpl.h @@ -0,0 +1,42 @@ +#ifndef __bbtkPimpl_h_INCLUDED__ +#define __bbtkPimpl_h_INCLUDED__ + + +/** \brief Macro defining the members used to hide a class implementation details using the pimpl idom + * /// See http://c2.com/cgi/wiki?PimplIdiom + * NOTE : + * - Defines the struct Pimpl to be implemented in cpp file + * - Declares a private member called p + * - Declares the methods PimplConstruct/PimplCopyConstruct/PimplDestruct + */ +#define BBTK_DECLARE_PIMPL(CLASS) \ + private: \ + /* The Pimpl struct forward definition */ \ + class Pimpl; \ + /* The Pimpl pointer */ \ + Pimpl* p; \ + /* Constructs the Pimpl (to be called in all Ctors) */ \ + void PimplConstruct(); \ + /* Copy constructs the Pimpl (to be called in copy Ctor) */ \ + void PimplCopyConstruct(const CLASS&); \ + /* Destructs the Pimpl (to be called in Dtor) */ \ + void PimplDestruct(); + +#endif + +/** \brief Macro implementing the PimplConstruct/PimplCopyConstruct/PimplDestruct method declared by BBTK_DECLARE_PIMPL: to be put in cpp **/ +#define BBTK_IMPL_PIMPL(CLASS) \ + void CLASS::PimplConstruct() \ + { \ + p = new Pimpl; \ + } \ + void CLASS::PimplCopyConstruct(const CLASS& o) \ + { \ + p = new Pimpl(*(o.p)); \ + } \ + void CLASS::PimplDestruct() \ + { \ + delete p; \ + } + +