#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; \ }