Boost logo

Boost Users :

Subject: Re: [Boost-users] make member functions (in)accessible
From: dhruva (dhruva_at_[hidden])
Date: 2009-02-26 09:08:56


Though I have not used it myself, there is enable_if or disable_if in BOOST. That might help. -dhruva ----- Original Message ---- > From: Stefan Funck <stefanfunck_at_[hidden]> > To: boost-users_at_[hidden] > Sent: Thursday, 26 February, 2009 7:34:01 PM > Subject: [Boost-users] make member functions (in)accessible > > Dear all, > > I'm trying to find some magic that makes a member function of some object x > accessible if and only if it were called from within a class that has object x > as a member. Is there a (boost)-way of doing this? > > As this may seem a bit obscure, I'm trying to give an example: > > template > class Property > { > public: > T get() const; > void set(const T& val); > private: > T m_val; > }; > is a simple class holding a value of T. > > I have some classes holding potentially many Properties. I'd like to have these > properties publically available, some as only readable, others writable as well, > so that others (e.g. gui-classes) can access them: > > class A > { > public: > Property propA; > Property propB; > }; > > so I may do: > > A a; > a.propA.get(); > a.propA.set(0.5); > a.propB.get(); > > but NOT: > > a.propB.set(1); > > because propB was defined with Writable=false. BUT, from within class A, I would > like to do > > propB.set(1); > > because otherwise this property is useless. (How) can this be achieved (with > boost)? > > I could make set() private in the Writable=false - specialisation of Property > and declare A as a friend, but that's prohibitive since Property shouldn't know > about A and it won't work for derived classes of A. Another option would be > > class A > { > public: > A() : propA(propA_priv), propB(propB_priv) {} > > PropertyWrapper propA; > PropertyWrapper propB; > private: > Property propA_priv; > Property propB_priv; > }; > > so the actual properties are private and the wrapper provides the actual > interface to the outside world. But as there may be many properties I'd like to > get away without the wrapper objects ... > > Thanks for any ideas! > Stefan > > _______________________________________________ > Boost-users mailing list > Boost-users_at_[hidden] > http://lists.boost.org/mailman/listinfo.cgi/boost-users Add more friends to your messenger and enjoy! Go to http://messenger.yahoo.com/invite/


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net