0

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

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

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

4

1 回答 1

1

属性只不过是 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 有什么用处,那么很难跳过这个示例。

于 2010-05-01T01:25:35.327 回答