c++ - 在 Objective-C 中表达 C++ "protected virtual"习语的自然方式是什么?

标签 c++ objective-c design-patterns

在 C++ 中,有一个模板方法惯用语,基类实现了它的所有算法,但排除了一些微小的差异(通常必须处理数据格式等),以便子类以 protected 虚方法的形式实现,而这些方法不是层次结构客户端可访问。

在 Objective-C 中表达相同习语的最自然方式是什么?

谢谢。

最佳答案

我会创建一个带有类别的单独头文件。您可以将该类别命名为 Protected:

@interface MyClass(Protected)
// Place your "protected" methods here.
@end

普通类用户不会#import这个文件,只有主类文件。但是实现和子类也会 #import 包含 Protected 类别的头文件。

如果这些方法是可选的,您可以改为使用协议(protocol):

@protocol MyClassProtected
// Required methods here.
@optional
// Optional methods here.
@end

我觉得这个解决方案不如类别,但它会起作用。

然后,第三种方法就是简单地避免约定俗成:相应地命名您的 protected 方法:

@interface MyClass {
}

// This method is not to be called by users, but subclasses may
// overwrite to do something else.
- (void) protected_someMethodDoingFoo;
@end

关于c++ - 在 Objective-C 中表达 C++ "protected virtual"习语的自然方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956988/

相关文章:

c++ - 使用 FFMPEG 库到 UDP 流 mpeg2 ts 视频延迟/初始连接问题

c++ - 3D vector 归一化问题

python - 如何在 Windows 中监控 USB 端口上的输入?

objective-c - Xcode 4.2 codesense - 你如何缩小建议的完成列表?

iphone - 如何管理多个异步 NSURLConnection 委托(delegate)?

c++ - 从 QWidget 中的 QTextEdit 获取文本

ios - 在最新的 SDK 中使用自动释放池,是否有必要,甚至有益,删除通知?

c# - 什么设计模式适合将数据表转换为域对象列表?

c++ - 如何在 C++ 中模拟递归类型定义?

java - 几个类之间的通信