C++ cli 创建类的句柄';财产

C++ cli 创建类的句柄';财产,c++-cli,properties,handle,C++ Cli,Properties,Handle,是否可以为类的属性创建句柄(或跟踪句柄)?比如说, System::Windows::Forms::CheckBox^ Box = gcnew System::Windows::Forms::CheckBox() 我想为Box的Checked属性创建一个句柄,并使用它来访问和修改它 对于set/get方法来说,属性只不过是语法上的糖分,而且,顺便说一句,没有办法捕获对一个方法的任何类型的引用(我想类似于绑定方法) 我能想到的需要VS2010的最佳解决方案是传递几个lambda: auto se

是否可以为类的属性创建句柄(或跟踪句柄)?比如说,

System::Windows::Forms::CheckBox^ Box = gcnew System::Windows::Forms::CheckBox()

我想为Box的Checked属性创建一个句柄,并使用它来访问和修改它

对于set/get方法来说,属性只不过是语法上的糖分,而且,顺便说一句,没有办法捕获对一个方法的任何类型的引用(我想类似于绑定方法)

我能想到的需要VS2010的最佳解决方案是传递几个lambda:

auto set = [=](bool b) { Box->Checked = b; };
auto get = [=]() -> bool { return Box->Checked; };
编辑(因为您没有VS2010):

当然,您可以回到编写特殊用途类的巴洛克式惯例:

public generic<typename T> interface class PropertyProxy
{
    property T Field;
};

public ref class CheckBoxChecked : public PropertyProxy<bool>
{
public:
    CheckBoxChecked(System::Windows::Forms::CheckBox^ box) : _box(box) { }
    property bool Field
    {
        bool get() { return _box->Checked; };
        void set(bool b) { _box->Checked = b; };
    }

private:
    System::Windows::Forms::CheckBox^ _box;
};
公共泛型接口类PropertyProxy
{
属性T字段;
};
public ref class CheckBoxChecked:public PropertyProxy
{
公众:
复选框选中(系统::Windows::窗体::复选框^box):\u box(框){}
属性布尔域
{
bool get(){return\u box->Checked;};
无效集(bool b){u-box->Checked=b;};
}
私人:
系统::Windows::窗体::复选框^\u框;
};

如果有人问你C++的lambdas有什么用,很难通过这个例子。但恐怕这不是一个选择。我想我应该等待另一个答案来证实/反驳你的回答。谢谢你的快速回答。