////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Vicente J. Botet Escriba 2010. // Distributed under the Boost // Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or // copy at http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/stm for documentation. // ////////////////////////////////////////////////////////////////////////////// #include #include //using namespace boost; struct segment { private: int get_length() const { return e()-b(); } int get_length2() const { return e()-b(); } void set_length2(int const& l) { e()=b()+l; } public: segment(int v1, int v2) : b_(v1), e_(v2) {} BOOST_RO_PROPERTY(segment, int, length); BOOST_RW_PROPERTY(segment, int, length2); BOOST_RW_PROPERTY_STORAGE(segment, int, b); BOOST_RW_PROPERTY_STORAGE(segment, int, e); }; struct P1 { }; struct P2 { }; struct S { int i; P1 p1; P1 p2; }; int main() { segment t(1,6); std::cout << "t.length=" << t.length() << std::endl; std::cout << "t.b=" << t.b() << std::endl; std::cout << "t.e=" << t.e() << std::endl; t.length2()=10; std::cout << "t.length=" << t.length() << std::endl; std::cout << "t.length2=" << t.length2() << std::endl; std::cout << "sizeof(segment)=" << sizeof(segment) << std::endl; std::cout << "sizeof(P1)=" << sizeof(P1) << std::endl; std::cout << "sizeof(P2)=" << sizeof(P2) << std::endl; std::cout << "sizeof(S)=" << sizeof(S) << std::endl; }