#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


작년엔 재밌는 사람들 넘쳤는데 ㅋㅋ