C ++ ไม่มีในตัวคุณสามารถกำหนดเทมเพลตเพื่อเลียนแบบคุณสมบัติการทำงาน:
template <typename T>
class Property {
public:
virtual ~Property() {}
virtual T& operator= (const T& f) { return value = f; }
virtual const T& operator() () const { return value; }
virtual explicit operator const T& () const { return value; }
virtual T* operator->() { return &value; }
protected:
T value;
};
ในการกำหนดคุณสมบัติ :
Property<float> x;
ในการใช้getter / setter ที่กำหนดเองเพียงแค่สืบทอด:
class : public Property<float> {
virtual float & operator = (const float &f) { return value = f; }
virtual operator float const & () const { return value; }
} y;
ในการกำหนดคุณสมบัติอ่านอย่างเดียว :
template <typename T>
class ReadOnlyProperty {
public:
virtual ~ReadOnlyProperty() {}
virtual operator T const & () const { return value; }
protected:
T value;
};
และเพื่อใช้ในชั้นเรียนOwner
:
class Owner {
public:
class : public ReadOnlyProperty<float> { friend class Owner; } x;
Owner() { x.value = 8; }
};
คุณสามารถกำหนดบางส่วนข้างต้นในมาโครเพื่อให้กระชับมากขึ้น