#define IF(dest) {try { dest; }
#define SWITCH_START(ret) catch(char *value){ ret result = (ret)value;
#define SWITCH_END }
#define RETURN throw (char *)(void *)
#define END_IF }
#define NONE_RET void
template<class _Ptr> inline
NONE_RET call(_Ptr& t)
{ // call
RETURN (t);
}
template<class _Ptr> inline
_Ptr receive(_Ptr t) throw()
{ // receive
IF(call(t))
SWITCH_START(_Ptr)
return result;
SWITCH_END
END_IF
return t;
}
template<class _Ptr> inline
_Ptr& receive(_Ptr& t) throw()
{ // receive
IF(call(t))
SWITCH_START(_Ptr&)
return result;
SWITCH_END
END_IF
return t;
}
#define receive_pointer( t ) *(receive(&t))
int main()
{
char *txt = "asdfasdf";
IF(call(txt)) // 익셉션을 발생시킨다.
SWITCH_START(char *) // char *로 가져온다.
printf("%s\n", result); // 그대로 출력
SWITCH_END
END_IF
// 기타
printf("%d\n", receive_pointer(txt));
printf("%s", receive_pointer(txt));
return 0;
}
by it_bank students
작년엔 재밌는 사람들 넘쳤는데 ㅋㅋ
by it_bank students