Cのマクロでは部分文字列は出来ない
ObjC上で、似たようなコードを沢山書いていたのでマクロを使おうとした。
id objectWrappingFrom(void* inPtr, const char* inType)
{
id theResult = nil;
if( strcmp(@encode(char), inType) )
{
theResult = [NSNumber numberWithChar:*(char*)inPtr];
}
else if( strcmp(@encode(unsigned char), inType) )
{
theResult = [NSNumber numberWithUnsignedChar:*(unsigned char*)inPtr];
}// こんなのが沢山
.
.
.
.
else
{
theResult = [NSValue valueWithBytes:inPtr
objCType:inType];
}
return theResult;
}
NSNumberのメソッド名中の型名、@encode中の型名、キャストの型名が微妙に違う。 メソッド名の型名だけcamelCaseになっている。
これをマクロで記述しようと一日中頑張ったが私の能力では無理だった。
Cのマクロでは文字列から部分文字列を取り出せないらしい。 文字列の結合は##で出来るが、文字列を切り分ける方法が無い。
1/18日追記
上のコードは思いきり間違い。
strcmpは文字列が等しい時に0を返すので、
id objectWrappingFrom(void* inPtr, const char* inType)
{
id theResult = nil;
if( strcmp(@encode(char), inType) == 0) // <--- コレ
{
theResult = [NSNumber numberWithChar:*(char*)inPtr];
}
.
.
.
としなければならない。