C++类成员属性的一种简洁实现(3)

全国等级考试资料网 2019-01-23 14:13:37 59
所以我想到可以利用C/C++中强大的武器宏,我们来定义几个宏
#define PROP(T,X) __declspec(property(get= __get##X,put= __put##X))T X;
#define GETPROP(T,X) __declspec(property(get= __get##X))T X; //只读属性
#define SETPROP(T,X) __declspec(property(put= __put##X))T X; //只写属必
#define GET(T,X) T __get##X(void)
#define SET(T,X) void __put##X(T value)
说明一下:T 代表属性的类型如int,double,CString,而X代表属性名称。如果你需要一个只读属性可以使用GETPROP,只写属性则可以使用 SETPORP,然后对应使用一个GET或SET,当然如果你用PROP,而只用了一个GET或SET,也没有错,只是在编译时会告诉你没有一个 __getXXX或__putXXX的方法。然后我们就可以这样来写我们的类。
class CEmployee
{
private:
int m_old;
public:
PROP(int ,Old)
GET(int,Old)
{
return m_old;
}
SET(int,Old)
{
if( (value >0) && (value <60)) //这里的value你可把它和C#一样当做关键字
{
m_old = value;
}
else
{
m_old =20;
}
}
};
好了,我们要做的工作已经做完了。当然这种方法还是有很多问题,比如不能使用C#中常用的索引属性,静态属性等等。但是毕竟我们是C++程序员么,呵呵!最后,这种方法只是在VC下有用。 相关资料

相关阅读