我正在尝试在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模板,所以请不要提供使用它的建议/示例。
答案 0 :(得分:0)
我认为Cocoa SDK中的委托实现了两种模式:Observer pattern和Delegate pattern。
在实现中,您实现了Observer模式的一部分,其中MainViewController通知委托有关事件。
可可中委托模式的示例是表视图委托和数据源。表视图为委托和数据源提供了单元格和视图的创建。
您可以执行Listener模式。