C++中的可可代表团模式

Cocoa Delegation Pattern in C++

本文关键字:代表团 模式 可可 C++      更新时间:2023-10-16

我正在尝试在c ++中实现cocoa的委托模式。

我试图在图像选择器示例中模拟可可委托模式,如下所示。但是,我不确定这是在C++中实现的正确方法,并且想知道是否有人对更好的东西有想法。我还注意到我出来的这个实现与传统的C ++委托无关(?( 见这里 (。我什至不确定上一个链接中的委托实际上是委托模式(我认为它只不过是函数指针(。

class ImagePickerControllerDelegate {          // defined as protocol in swift
    public:
    virtual void ImagePickerFinished() = 0;
};

class ImagePickerController {
public:
    ImagePickerControllerDelegate * delegate;
private:
    void findImageDirectory()   {}
    void checkUserPermission()  {}
    void loadImage(char* image_name)    {}
    void andDoOtherThings() {}
public:
    void Run()  {
    // doing long stuff here ..
    findImageDirectory();
    checkUserPermission();

    loadImage("lena");
    andDoOtherThings();
    // done, notify
    delegate->ImagePickerFinished();
    // other clean-up etc.
    }
};

class MainViewController: ImagePickerControllerDelegate {

    ImagePickerController ImagePicker = ImagePickerController();
public:
    MainViewController()    {
    this->ImagePicker.delegate = this;
    }
    void UserClicked()  {
    ImagePicker.Run();
    }
    virtual void ImagePickerFinished()  {
    std::cout << "image picker finished..";
    }

};

简而言之,我需要在C++中简单而美观地实现可可委托模式的好建议。我真的不喜欢丑陋的 STL 模板的东西,所以请不要给出使用它的建议/示例。

我认为Cocoa SDK中的委托实现了两种模式:观察者模式和委托模式。

在您的实现中,您实现了观察者模式的一部分,其中 MainViewController 通知委托有关事件的信息。

cocoa 中的委托模式示例包括表视图委托和数据源。表视图为委托和数据源提供单元格和视图的创建。

侦听器模式的实现是可以的。