繁体   English   中英

在Objective-C中表达C ++“受保护的虚拟”习惯用法的自然方法是什么?

[英]What is the natural way to express C++ “protected virtual” idiom in Objective-C?

在C ++中,当基类实现其所有算法时,有一个模板方法惯用法,但排除了一些细微的差异(通常必须处理数据格式等),以便子类以受保护的虚拟方法的形式实现,而这些方法是层次结构无法访问的客户。

在Objective-C中表达相同习惯用法的最自然方法是什么?

谢谢。

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

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

普通班级用户不会#import该文件,而仅主班级文件。 但是实现和子类也会#import包含Protected类别的头文件。

如果方法是可选的,则可以改用协议:

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

我觉得这不是一个比类别更好的解决方案,但它可以工作。

然后,第三种方法是简单地避免使用约定:相应地命名受保护的方法:

@interface MyClass {
}

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

对我来说,这听起来像您正在要求Java抽象类的概念。 对抽象Objective C类的讨论是否有帮助?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM