首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问C++中的属性实现

2012-11-03 
请教C++中的属性实现?C#中的属性一般为:C# codepublic double Number{set { SetValue(NumberProperty, val

请教C++中的属性实现?
C#中的属性一般为:

C# code
public double Number{  set { SetValue(NumberProperty, value); }  get { return (double)GetValue(NumberProperty) }}


请问,用C++如何实现上面的语法效果?

如何通过一个宏或者函数来实现:
C/C++ code
public int Width{  set { SetValue(WidthProperty, value); }  get { return (int)GetValue(WidthProperty) }}public int Height{  set { SetValue(HeightProperty, value); }  get { return (int)GetValue(HeightProperty) }}


谢谢!

[解决办法]
VC++支持,用法如下:
C/C++ code
// declspec_property.cppstruct S {   int i;   void putprop(int j) {       i = j;   }   int getprop() {      return i;   }   __declspec(property(get = getprop, put = putprop)) int the_prop;//定义属性};int main() {   S s;   s.the_prop = 5;   return s.the_prop;}
[解决办法]
C++属性

C/C++ code
 _declspec(property(put=setJobID, get=getJobID))         unsigned long jobID;     void  setJobID(unsigned long inJobID);     unsigned long   getJobID() const;
[解决办法]
codeproject上也有下面这样的宏
C/C++ code
#define PROPERTY(t,n)  __declspec( property ( put = property__set_##n , get = property__get_##n ) ) t n;\    typedef t property__tmp_type_##n;#define READONLY_PROPERTY(t,n) __declspec( property (get = property__get_##n) ) t n;\    typedef t property__tmp_type_##n;#define WRITEONLY_PROPERTY(t,n) __declspec( property (put = property__set_##n) ) t n;\    typedef t property__tmp_type_##n#define GET(n) property__tmp_type_##n property__get_##n() #define SET(n) void property__set_##n(const property__tmp_type_##n& value)
[解决办法]
扩展了下,不过没做到和C#语法一致
C/C++ code
#include <iostream>using namespace std;#define PROPERTY(t,n)  __declspec( property ( put = property__set_##n , get = property__get_##n ) ) t n;\    typedef t property__tmp_type_##n;#define READONLY_PROPERTY(t,n) __declspec( property (get = property__get_##n) ) t n;\    typedef t property__tmp_type_##n;#define WRITEONLY_PROPERTY(t,n) __declspec( property (put = property__set_##n) ) t n;\    typedef t property__tmp_type_##n#define GET(n) property__tmp_type_##n property__get_##n() #define SET(n) void property__set_##n(const property__tmp_type_##n& value)  class Value{public:    template<typename T>    void SetValue(T& dst, const T& src)    {        dst = src;    }    template<typename T>    T GetValue(const T& tag)    {        return tag;    }};class A : Value{public:        PROPERTY(int, Width);    SET(Width) {SetValue(_width, value);}    GET(Width) { return (int)GetValue(_width);}    WRITEONLY_PROPERTY(int, Height);    SET(Height) {SetValue(_height, value);}private:    int _width;    int _height;};int main(){    A a;    a.Width = 2;    a.Height = 3;    cout << a.Width <<endl;;    cout << a.Height<<endl; // error, no get    return 0;} 

热点排行