是否可以为类的属性创建句柄(或跟踪句柄)?例如,
System::Windows::Forms::CheckBox^ Box = gcnew System::Windows::Forms::CheckBox()
我想为Box的 Checked 属性创建一个句柄,并使用它来访问和修改它。
是否可以为类的属性创建句柄(或跟踪句柄)?例如,
System::Windows::Forms::CheckBox^ Box = gcnew System::Windows::Forms::CheckBox()
我想为Box的 Checked 属性创建一个句柄,并使用它来访问和修改它。
属性只不过是 set/get 方法的语法糖,而且,AFAIK 没有办法捕获对某个方法的任何类型的引用(我想类似于绑定方法)。
我能想到的需要 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;
};
如果有人问您 C++ lambda 有什么用处,那么很难跳过这个示例。