__declspec(property())
http://blogs.wankuma.com/melt/archive/2007/03/12/66223.aspx
プロパティ (C++)
http://msdn.microsoft.com/ja-jp/library/yhfk0thd(v=vs.110).aspx
VC++2005 の頃からあったのですが、MS-C++の場合はプロパティを作れたのですね…なるほど。
__declspec(property())な構文を作れば、VB/C# のようにプロパティでアクセスできるという便利さ。これだと、Model を作る時に良さそうってことで、早速 PROPERTY マクロを作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include "stdafx.h" #include <afxwin.h> #include <iostream> #include <string> class Model { private : int _value; public : __declspec(property( get =GetValue, put=SetValue)) int Value; public : int GetValue() { return _value; } void SetValue( int value ) { _value = value; } // マクロで定義する #define PROPERTY( _t, _m ) \ private : _t m_##_m ; \ public : \ __declspec(property( get = get ##_m, put= set ##_m)) _t _m ; \ _t get ##_m() { return m_##_m; } \ void set ##_m( _t value ) { m_##_m = value; }; public : PROPERTY( int , Number ); PROPERTY( CString, Name ); PROPERTY( double , Pressure ); PROPERTY( std:: string , MyName ); }; int _tmain( int argc, _TCHAR* argv[]) { Model model; model.Value = 10; model.Name = L "masuda tomoaki" ; model.Number = 10; model.Pressure = 1.2f; model.MyName = "tomoaki" ; std::cout << "name: " << model.Name << std::endl << "num: " << model.Number << std::endl; std::cout << "myname: " << model.MyName << std::endl; return 0; } |
このコードでは CString を cout しているときには文字化けしていますが、まぁ大抵のところはok。
これで、なんらかの形でプロパティ名とバインドさせれば、INotify を実装できるかな。