有没有办法在预处理器中获取当前作用域的类?
目前,我正在做的是:
我有一个宏:
#define DATA_SOURCE_DEF_CONSTR(CLASS) + (CLASS *)dataSource { \
CLASS *source = [[[CLASS alloc] init] autorelease]; \
return source; \
}
然后我在许多类中使用该宏,如:
DATA_SOURCE_DEF_CONSTR(SpecialDataSource)
我想要像:
#define DATA_SOURCE_DEF_CONSTR + (__CLASS__ *)dataSource { \
__CLASS__ *source = [[[__CLASS__ alloc] init] autorelease]; \
return source; \
}
并称之为:
@implementation ...
DATA_SOURCE_DEF_CONSTR
...
@end
使用预处理器在Objective-C中可以实现吗?
答案 0 :(得分:2)
我没有得到你想要完成的任务。为什么不直接向NSObject添加一个类别,如:
@implementation NSObject (handyConstructor)
+ autoreleasedInstance { return [[[self class] alloc] init] autorelease]; }
@end
您是否有理由希望特别是预处理器完成此操作?
答案 1 :(得分:1)
有一个新的关键字instancetype
,或许可以帮到你;更多here。以你的例子:
#define DATA_SOURCE_DEF_CONSTR + (instancetype)dataSource { \
return [[[[self class] alloc] init] autorelease]; \
}