コンパイル時に次のことを行う方法はありますか?
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
明確化/簡素化
1つのマクロでこれを行う方法はないと思います。ただし、マクロが間違ったデータ型で使用されている場合に警告する必要があります。これらの2つのタイプは次のとおりです:object
およびnon-object
)。
それがオブジェクトであるかどうかを確認するには、これが機能します。
#define __warn_if_not_object(var) if(0){[(var) class];}
必要なもの:
#define _warn_if_object(var) if(0){__something_here__}
繰り返しますが、これはコンパイル時に発生する必要があります。また、エラーまたは警告をスローする可能性があります。
ありがとう