David Abrahams wrote: > Here's an example I just cooked up of using the PP lib to solve a > classic C++ OO problem: repeated boilerplate in the definition of > Pimpl classes.
There is another variation of the idiom, sometimes called "hidden state", which doesn't have the shortcoming in the first place: class foo { public: foo(); foo(int); int f() const; void g(double*); private: struct state; scoped_ptr<state> m_state; }; and then in the .cpp file: struct foo::state { // c'tor only! state( int b, double* fu ); int bar; double* fu; }; foo::foo( int b ) : m_state( new state( b, 0 ) ) { } int foo::f() const { return m_state->bar; } void foo::g( double* ptr ) { m_state->fu = ptr; } A nice by-product property of the technique is that now you don't have to prefix/postfix the state's member names since their are always accessed throuh 'm_state->' (or 'state().' or 'self().' or whatever accessor you prefer). Here at work we have a little helper class that hides the rest of the boilerplate stuff: class foo : hidden_state<foo> { public: foo(); foo(int); int f() const; void g(double*); }; FWIW :), Aleksey _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost