물론 이상한 해결책이지만 이상한 질문이 있습니다.
objective-C++을 활성화해야합니다. .m- 파일의 이름을로 변경하십시오.mm 그런 다음 당신은 코드처럼 보일 것입니다 : 방법은 그 같은 것을 구현 될 수
void weird_function(int a)
{
switch (a)
{
case 0: throw @"Hello";
default: throw a;
}
}
void some_code(int a)
{
try
{
weird_function(a);
}
catch (int a)
{
NSLog(@"Catch int: %d", a);
}
catch (NSString* str)
{
NSLog(@"Catch string: %@", str);
}
}
너의가 :
union ValueHolder
{
void* voidPtrValue;
int intValue;
float floatValue;
NSString* nssstringValue;
};
- (void)getIvarWithName:(const char *)name in:(id)obj
{
ValueHolder vh;
Ivar ivar = object_getInstanceVariable(obj,name, &vh.voidPtrValue));
if (NULL == ivar)
return;
const char* encoding = ivar_getTypeEncoding(ivar);
if (0 == strcmp(encoding, @encode(int)))
throw vh.intValue;
if (0 == strcmp(encoding, @encode(float)))
throw vh.floatValue;
if (0 == strcmp(encoding, "@\"NSString\""))
throw vh.nsstringValue;
}
왜 C에 대해 묻고 있습니까? C는'id' 나'NSString * '을 지원하지 않습니다. C 타입을 원한다면 아마도'void *'를 반환하고 싶을 것이다. – rmaddy
어디에서 값을 얻고 있습니까? iVars를 가지고 있다면 속성을 사용하는 것을 고려한 다음 동적으로 액세스하려면 'valueForKey :'를 사용하십시오. – Rich