Listing 2

// rectangle.h
struct rectangle : reflectable_properties_object<rectangle> {
    long left() const { return m_left; }
    void left(const long & l) { m_left = l; }
    // ... same for top, with, height
private:
    // ...
};
// rectangle.cpp
// registering get/set properties: left, top, with, height
register_reflect 
  r_left_("left", &rectangle::left, &rectangle::left);
register_reflect
  r_top_("top", &rectangle::top, &rectangle::top);
register_reflect
  r_width_("width", &rectangle::width, &rectangle::width);
register_reflect
  r_height_("height", &rectangle::height, &rectangle::height);