C++에 미련이 있는 사람들을 위한 call by reference

IRC에서 후배 nezy군이 C++의 &인자와 같은 참조에 의한 호출은 어떻게 하냐고 물어봐서, 오기로 한번 만들어 봤습니다. 안 될게 뭐 있어!

import re

re_loadname = re.compile('LOAD_NAME\s+[0-9]+\s+\(([a-zA-Z0-9_]+)\)')
def set_refobj(argorder, value):
    import inspect, dis, sys, StringIO
    frame = inspect.stack()[2]
    sys.stdout, saved_stdout = StringIO.StringIO(), sys.stdout
    dis.dis(frame[0].f_code)
    disresult = sys.stdout.getvalue().split('\n\n')
    sys.stdout = saved_stdout
    for linedump in disresult:
        if int(linedump.split()[0]) == frame[0].f_lineno:
            varnam = re_loadname.findall(linedump)[argorder]
            frame[0].f_locals[varnam] = value

def yay(x, y):
    set_refobj(1, x ** 2)
    set_refobj(2, y / 2)

t = 7
r = 8
yay(t, r)
print t, r

결과 값으로 “49 4″가 나옵니다. t와 r이 yay 함수에서 계산된 값으로 세팅된 것~ 🙂

(주의사항): 이 소스는 그냥 장난이지 실제로 이렇게 쓰시기를 추천하는 것은 아닙니다.;;;

5 thoughts on “C++에 미련이 있는 사람들을 위한 call by reference”

  1. (요새 코멘트가 잘 안 달려서 코멘트 달아주는 사람들한테 무지 감사;;)

    힝, 이쁨받고픈 맘엥^^;(푸퍼퍽)

  2. Pingback: Ikspres

Comments are closed.