Callback 함수의 signature가 다를 때 보통 어떻게 하시나요?
글쓴이: twinwings / 작성시간: 월, 2015/12/07 - 12:15오전
typedef boolean (*Callback)(void* user_data); boolean callback_register(Callback callback_fn, void* user_data); boolean my_function(int a, int b, int c) { ... } typedef struct _MyFunctionWrapperArg { int a; int b; int c; }MyFunctionWrapperArg; boolean my_function_wrapper(MyFunctionWrapperArg* arg){ return my_function(arg->a, arg->b, arg->c); }
등록시:
callback_register((Callback)my_function_wrapper, arg);
전 보통 이렇게 작성하는데 더 좋은 방법이 있나요?
Forums:
콜백함수는 함수포인터 사용하기'일겁니다.
콜백함수'는 등록하자마자. 호출되지는 않습니다.
대신. 프레임구조에 따라서. 등록하자마자. 호출이 되는 경우도 있으니. 주의해야 합니다.
_cdecl,_fastcall,_stdcall 함수 호출 방식 (콜백함수는 아니지만. 호출방식 설명입니다.)
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=149029804&qb=X2NkZWNs&enc=utf8§ion=kin&rank=2&search_sort=0&spq=0
윈도우에서는 윈도우 프로시져를 콜백(호출)하여 사용하기도 합니다.
윈도우 콜백함수
http://kldp.org/node/115032
//윈도우 CallBack함수
//http://blog.naver.com/kjio9710?Redirect=Log&logNo=220519950998
//http://msbang.co.kr/80188333982
//http://kldp.org/node/154070
callback msdn
http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=callback+msdn&gbv=2&oq=callback+msdn&gs_l=heirloom-hp.3..0j0i30j0i5i30l8.917.4827.0.5140.15.13.1.1.1.0.156.1543.0j13.13.0....0...1ac.1.34.heirloom-hp..0.15.1556.lPUlyQOwCO4
callback
http://www.codeproject.com/search.aspx?q=callback&x=10&y=4&sbo=kw
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
제가 콜백함수를 모르는게 아닙니다.(glib,
제가 콜백함수를 모르는게 아닙니다.(glib, winapi 등의 프레임워크는 이미 다뤄봤습니다.)
그리고 당연히 바로 호출되는게 아니겠지요. 비동기를 위해 콜백함수라는 인터페이스를
개발된것인데, 바로 호출되는게(동기적으로 호출되는게) 이상하지 않습니까.. 또한
C++에서 비슷한 경우로 function signature의 개수가 적어지는 경우
std::bind 라는 템플릿등을 제공하는 것 또한 알고 있습니다. 혹은 std::function 이라던지..
단지 저는 "C"에서의 콜백함수를 좀 더 편하게 사용하는 방법이 있는지, 특히
function signature가 다를 경우-특히 매개변수가 더 많아 질 경우-에 대한 질문인데
엉뚱한 답변을 하고 계십니다.
gilgil.net
C++라면 boost::any의 list(혹은 vector)를 이용하여 넘기면 될 것 같은데...
C라면 좀 힘들겠네요. va_list를 이용하면 되지 않을까요?
www.gilgil.net
댓글 달기