C ++中的可可委派模式

时间:2019-02-12 09:05:07

标签: c++ ios

我正在尝试在c ++中实现可可的委派模式。

我试图在图像选择器示例中模拟可可委派模式,如下所示。但是,我不确定这是否是用C ++实现的正确方法,并且想知道是否有人对更好的东西有想法。我也注意到 我实现的此实现与传统的c ++委托(?)(see here)无关。我什至不能确定上一个链接中的委托实际上是委托模式(我认为除了函数指针之外什么都没有)。

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模板,所以请不要提供使用它的建议/示例。

1 个答案:

答案 0 :(得分:0)

我认为Cocoa SDK中的委托实现了两种模式:Observer patternDelegate pattern

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

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

您可以执行Listener模式。