Boost logo

Boost :

Subject: Re: [boost] [property] interest in C# like properties for C++?
From: Nocky Tian (tiannocky_at_[hidden])
Date: 2009-12-17 07:00:21


I have written another example that override the assign operator, take a look
http://tiannocky.spaces.live.com/blog/cns!D80340372C1B949E!346.entry
Though, the comments are in Chinese, the code is C++

> Date: Mon, 19 Oct 2009 19:03:52 +0200
> From: peder.holt_at_[hidden]
> To: boost_at_[hidden]
> Subject: [boost] [property] interest in C# like properties for C++?
>
> I have implemented a prototype support for properties in C++.
> It has no space overhead as it manages to deduce the this pointer of the
> class owning it.
>
> Code sample:
>
> #include <boost/static_assert.hpp>
> #include <boost/property.hpp>
> #include <iostream>
>
> class class_with_property {
> public:
> //Implement property template
> template<typename Base>
> class property_with_a_sensible_name : public Base
> {
> public:
> void set(const double& a) {
> //Implement setting of the variable here.
> m_var=a;
> //You can access the owner of the property's this value by
> calling self(), e.g.
> self()->refresh();
> }
> const double& get() const {
> return m_var;
> }
> private:
> double m_var;
> };
> void refresh() {
> std::cout << "Refreshed";
> }
> //Instantiate property template. These can be reused.
>
> BOOST_PROPERTY(class_with_property,property_with_a_sensible_name,property_name);
> };
>
> //And usage:
> void test() {
> class_with_property cls;
> cls.property_name=54.3;
> BOOST_STATIC_ASSERT(sizeof(class_with_property)==sizeof(double));
> }
>
> The trick used is the following:
>
> class my_class {
> public:
> class property_x {
> public:
> my_class* self() {
> //Find offset of member relative to my_class
> size_t offset=size_t(&((my_class*)0)->x);
> //Use this to deduce the address of my_class
> return reinterpret_cast<my_class*>(size_t(this)-offset);
> }
> };
> property_x x;
> };
>
> It currently support:
> Read/Write properties
> Read properties
> Write properties
>
> Not supported yet:
> indexed properties
> operator overloads for properties, e.g. my_class.property*my_class.property
> will currently fail.
>
> Regards
> Peder
                                               
_________________________________________________________________
Windows Live: Make it easier for your friends to see what you¡¯re up to on Facebook.
http://www.microsoft.com/middleeast/windows/windowslive/see-it-in-action/social-network-basics.aspx?ocid=PID23461::T:WLMTAGL:ON:WL:en-xm:SI_SB_2:092009


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk