代码之家  ›  专栏  ›  技术社区  ›  shadeMe

创建类属性的句柄

  •  0
  • shadeMe  · 技术社区  · 15 年前

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

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

    我想创建一个句柄 盒子 的选中属性,并使用它来访问和修改该属性。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Marcelo Cantos    15 年前

    对于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++ lambdas有什么好处,很难通过这个例子。