Boost logo

Boost :

Subject: [boost] [property] interest in C# like properties for C++?
From: Peder Holt (peder.holt_at_[hidden])
Date: 2009-10-19 13:03:52

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 {
     //Implement property template
     template<typename Base>
     class property_with_a_sensible_name : public Base
        void set(const double& a) {
           //Implement setting of the variable here.
           //You can access the owner of the property's this value by
calling self(), e.g.
        const double& get() const {
           return m_var;
        double m_var;
     void refresh() {
        std::cout << "Refreshed";
     //Instantiate property template. These can be reused.


//And usage:
void test() {
     class_with_property cls;

The trick used is the following:

class my_class {
  class property_x {
     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.*
will currently fail.


Boost list run by bdawes at, gregod at, cpdaniel at, john at