有没有办法在编译时执行以下操作?
int anInteger = 0;
__if_object(anInteger) {
// send object some messages
}
__if_primitive(anInteger) {
// do something else
}
可以使用它的虚拟情况是定义下面的 __add_macro。
#define __add_macro(var, val) __something_goes_here__
int i = 1;
MyInteger* num = [[MyNumber alloc] initWithValue:1]
__add_macro(i, 4);
__add_macro(num, 4);
// both should now hold 5
澄清/简化
我想没有办法用一个宏来做到这一点。但是我仍然需要它来警告宏是否用于错误的数据类型。这两种类型是:object
和non-object
)。
要检查它是否是一个对象,这有效:
#define __warn_if_not_object(var) if(0){[(var) class];}
我需要的:
#define _warn_if_object(var) if(0){__something_here__}
同样,我需要在编译时发生这种情况。它可以抛出错误或警告。
谢谢