TMyClass = class
private
FValue: Integer;
funcation GetValue: Integer;
procedure SetValue(value: Integer);
public
property Value: Integer read GetValue write SetValue;
end;
MyClass.Value := 100;
v = MyClass.Value;
// 取外部类实例指针(this)
// outClass 外部类名
// localClassMem 本地类成员
#define OUTCLASS_THIS(outClass, localClassMem) ((outClass*)((unsigned char*)this - offsetof(outClass, localClassMem)))// 属性定义宏
// cls 定义属性的类
// type 属性的类型
// propname 属性名
// getter 读函数
// setter 写函数
#define PROPERTY_R(cls, type, propname, getter) \
class property_##getter \
{ \
public: \
operator type () \
{ \
return OUTCLASS_THIS(cls, propname)->getter(); \
} \
} propname
#define PROPERTY_W(cls, type, propname, setter) \
class property_##setter \
{ \
public: \
property_##setter &operator = (const type& value) \
{ \
OUTCLASS_THIS(cls, propname)->setter(value); \
return *this; \
} \
} propname
#define PROPERTY_RW(cls, type, propname, getter, setter) \
class property_##getter_##setter \
{ \
public: \
operator type () \
{ \
return OUTCLASS_THIS(cls, propname)->getter(); \
} \
property_##getter_##setter &operator = (const type& value) \
{ \
OUTCLASS_THIS(cls, propname)->setter(value); \
return *this; \
} \
} propname
class Test
{
public :
PROPERTY_R(Test, int, ValueR, GetValueR);
PROPERTY_W(Test, float, ValueW, SetValueW);
PROPERTY_RW(Test, bool, ValueRW, GetValueRW, SetValueRW);
Test() : mValueR( 100), mValueW( 0), mValueRW( false)
{
}
int GetValueR()
{
return mValueR;
}
void SetValueW( const float value)
{
mValueW = value;
}
bool GetValueRW()
{
return mValueRW;
}
void SetValueRW( bool value)
{
mValueRW = value;
}
private :
int mValueR;
float mValueW;
bool mValueRW;
};
int _tmain( int argc, _TCHAR * argv[])
{
Test test;
int v = test.ValueR;
cout <<v <<endl;
test.ValueW = 1.0f;
test.ValueRW = true;
cout <<test.ValueRW <<endl;
return 0;
}
printf("%d", test.ValueR);
printf("%d", (int)test.ValueR);
# define PROPERTY_R(type, propname, getter) __declspec(property(get =getter)) type propname
# define PROPERTY_W(type, propname, setter) __declspec(property(put =setter)) type propname
# define PROPERTY_RW(type, propname, getter, setter) __declspec(property(get =getter, put =setter)) type propname
# define PROPERTY_ARRAY_R(type, propname, getter) __declspec(property(get =getter)) type propname[]
# define PROPERTY_ARRAY_W(type, propname, getter) __declspec(property(put =setter)) type propname[]
# define PROPERTY_ARRAY_RW(type, propname, getter, setter) __declspec(property(get =getter, put =setter)) type propname[]