Re: [Boost-users] Boost-users Digest, Vol 1918, Issue 3
I'm not sure how that could work, since I want different access rights for the very same object? Stefan
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
To: boost-users@lists.boost.org 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
participants (1)
-
Stefan Funck