__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 マクロを作成。
#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 を実装できるかな。