再谈用c++实现property,不明白那些委员会是干嘛吃的。

参阅了一些文章,做了一个vc、cb、gcc通用的property声明宏函数,经cb和devcpp测试通过,release版本的效率没有损失。真不明白c++委员会是干嘛吃的,整天搞那个标准库,却不肯扩充基本功能。面向对象的类的三个操作:方法、属性、事件,其中属性就不肯提供编辑器支持标准,cb和vc多少年前就支持了,不是c++做不到,,只是编程过程中,那些get()和set()之类的操作函数既不美观,书写也费劲,整体看起来,括号()太多了!

代码如下:

//property

#if defined(__BORLANDC__) || defined(_MSC_VER)#define property_get_set(class, type, name, getter, setter)\__declspec(property(get=getter, put=setter)) type name;#define property_get(class, type, name, getter)\__declspec(property(get=getter)) type name;#define property_begin#define property_end#else //defined(__BORLANDC__) || defined(_MSC_VER)//模拟的property是占用空间的#define property_get_set(class_t, type_t, name, getter, setter)\class property_##name\{\public:\friend class class_t;\inline size_t offset(){return offsetof(class_t, name); }\inline class_t* parent(){ return reinterpret_cast<class_t*>(size_t(this)-offset()); }\template<typename T> inline operator T()\{\return T(parent()->getter());\}\inline property_##name & operator=(const type_t& n)\{\parent()->setter(n);\return *this;\}\}name;#define property_get(class_t, type_t, name, getter)\class property_##name\{\public:\friend class class_t;\inline size_t offset(){ return offsetof(class_t, name); }\inline class_t* parent(){ return reinterpret_cast<class_t*>(size_t(this)-offset()); }\template<typename T>inline operator T()\{\return T(parent()->getter());\}\private:\property_##name & operator=(const type_t& n);\}name;//把property放到一个union里面,可以有效减少类空间的占用#define property_begin union{#define property_end };#endif//defined(__BORLANDC__) || defined(_MSC_VER)

明天是世上增值最快的一块土地,因它充满了希望

再谈用c++实现property,不明白那些委员会是干嘛吃的。

相关文章:

你感兴趣的文章:

标签云: