Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost-users Digest, Vol 1918, Issue 3
From: Stefan Funck (stefanfunck_at_[hidden])
Date: 2009-02-26 11:15:02


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 <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 <typename T, bool Writable>
>> 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 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