함수를 실행시켜 주는 함수에 대한 질문입니다.
안녕하십니까. 점심은 맛나게 드셨는지요. 전 이 글 쓰고, 맛나게 먹어 볼 생각입니다만... ㅎㅎㅎ
우선, 제목과 같은 함수를 만들고 싶습니다.
예를 들면, DoExecute( functionName, ... ) 같은 걸 만들어서,
DoExecute안에 함수 이름을 쓰면, 그 함수가 실행되는 거지요.
이걸 어디에 쓸라구 하냐면...
GUI에서, 버튼 클릭을 하면 이벤트가 발생하지 않습니까?
그런데, 이 버튼 자체가 config.txt파일에서 불러 온 설정에 의해 만들어지기 땜에, 이벤트 역시 설정 파일에 의해 결정됩니다. 그래서, DoExecute( FnName, ... ) 라는 식으로 함수를 실행시키는 함수를 만들어서 ClickEvent 안에 넣어보려고 했던 거죠.
첨에는 printf() 처럼 만들면 될 줄 알았는데, struct 를 넘겨주는 게 문제가 되더라구요.
그렇다고 struct 처리 부분을 만들어 주자니, 그럴 거면 아얘 처음부터 인자 자체를 unsigned char *로 넘겨 주고, 각각의 Function에서 type casting 해서 쓰는게 낫지 않을까.. 하는 생각이 들더라구요.
근데, 여기까지 생각해 보니... 과연 어느 방법이 관리가 쉬울까. 하는 생각이 들더란 말입니다.
질문입니다.
1. DoExecute라는, 함수를 실행시키는 함수를 만들되, 실행되는 함수의 형태나 기능이 아직 완전히 정해져 있지 않은 경우, 어떻게 해야 만들 수 있을까요?
2. 만일
2-1.가변 인자를 전달하는 것과,
2-2. 인자를 unsigned char * 로 저장하고, 그 포인터를 함수에 넘겨줘서, 해당 함수가 type casting 하는 방법을 쓸 경우, 어느 쪽이 더 관리에 편할까요?
3. 함수를 실행시키는 함수를 만들려 하는 것 보다, 실행될 함수 자체가 고정되어 있다는 생각 하에 접근하는 것이 올바르고 정신건강상 이로운가요?
현재는 [서비스]만 정해진 상태로, [기능]이 정해져 있지 않거든요.
이상입니다.
추운 날씨 몸 조심하시고, 점심 맛나게 드세요. ^^
쓸 수 있는 함수 set이 정해져 있고, 특별한 control flow를
쓸 수 있는 함수 set이 정해져 있고, 특별한 control flow를 제공할 것이 아니라면 단순히 string과 함수 포인터를 매핑하는 테이블만 있으면 될 것 같군요. 예를 들어..
그리고 설정파일에 지정되어 있는 함수 이름을 find_proc()에 주고, 실제 그 함수 포인터를 받아서, 이 것을 호출해 주는 식으로 만들면 될 것 같습니다.
그러나 만약 함수 set이 정해져 있지 않고, 특별한 control flow (예: 루프나 goto, conditional 등)까지 제공해야 한다면, 쓰기 편한 interpreter 하나 찾아서 embedding하는 것이 나을 것 같습니다.
Tcl, guile, 또는 다른 interpreter에 대해 더 검색해 보기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
답변 감사합니다.
이래저래 조금 생각해 본 결과...
의외로 간단히 가기로 결정했습니다.
text파일에서 string을 입력하고, 이 string을 숫자로 치환한 다음, HandleEvent() 에서 switch - case 로 구현하기로요.
요구사항이 구체적으로 나오면 그때 바꾸려구요. 요구사항도 안 나왔는데 바꿔봤자 시간만 잡아먹고 그에 비해 결과는 미쁘지 않더라구요.
답변 감사하구요. 좋은 하루 되시기 바랍니다.
댓글 달기