C++类成员属性的一种简洁实现(3)
所以我想到可以利用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下有用。 相关资料 |