#ifndef PROPERTIES_INCLUDED #define PROPERTIES_INCLUDED // These templated classes make it trivial to express properties in C++. enum AccessLevel { iGetIsPublic, iSetIsPublic, iGetIsProtected, iSetIsProtected, iGetIsPrivate, iSetIsPrivate }; /* Implemented so far: public, protected public private public public protected protected protected public - is this useful? protected private private private private protected - is this useful? private public - is this useful? */ template struct Property; template struct Property { explicit Property( T value ): m_value( value ) { } // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } protected: // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; template struct Property { explicit Property( T value ): m_value( value ) { } // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } private: // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } T m_value; }; template struct Property { explicit Property( T value ): m_value( value ) { } // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; template struct Property { explicit Property( T value ): m_value( value ) { } protected: // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; template struct Property { explicit Property( T value ): m_value( value ) { } protected: // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } public: // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; template struct Property { explicit Property( T value ): m_value( value ) { } protected: // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } private: // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; struct Property { explicit Property( T value ): m_value( value ) { } private: // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; struct Property { explicit Property( T value ): m_value( value ) { } private: // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } protected: // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; struct Property { explicit Property( T value ): m_value( value ) { } private: // getters // x = Value(); T operator() () const { return m_value; } // x = Value; operator T() const { return m_value; } public: // setters void operator() ( T const & value ) { m_value = value; } void operator= ( T const & value ) { m_value = value; } private: T m_value; }; #endif // PROPERTIES_INCLUDED