디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

매크로 없이 만드는 메시지 맵 Epic Fail ㅋㅋㅋ

나다라마법사(221.142) 2012.02.20 00:02:02
조회 78 추천 0 댓글 6

잉여력이 넘쳐나서 저런 쓸데없는 걸 만들어 봤는데


(메시지 - 메시지 핸들러 함수) 쌍을 HashMap으로 객체 내에 저장하고 wndProc()에서 적절히 찾아내서 메시지핸들러를 실행시키는 거...

클래스 하나에서는 잘 돌아가고, Derived 클래스에서 메시지핸들러를 overriding해도 잘 돌아가지만

Derived 클래스에서 처음으로 (메시지 - 메시지 핸들러 함수) 쌍을 추가하는 경우가 문제...


typedef int A::*MSGHANDLER (int arg);

class A {
        CALLBACK wndProc(int msg);                                        // 이놈이 적절히 msghandler를 골라서 실행한다.
        void addMsgHndlr(int msg, MSGHANDLER mh);        // hashmap에다 (msg-msghandler) 쌍을 저장
        MSGHANDLER getMsgHndlr(int msg);                        // hashmap에서 msghandler를 읽어온다
        virtual int onSize(int arg);                // sample msgHandler
};

A::wndProc(int msg) {
        return (this->*(getMsgHndlr(msg)))(arg);                <i>// 이게 잘 되면 B::wndProc()을 다시 쓸 필요가 없을 텐데...</i>
}
class B : public virtual A {
        virtual int onSize(int arg);        // A::onSize()를 overriding. 적절히 동작한다.
        int onDestroy(int arg);        // A에 등록했던 적이 없는 새로운 msghandler.
};

A a; B b;
a.addMsgHndlr(WM_SIZE, &A::onSize));        // ok
b.addMsgHndlr(WM_NCDESTROY, reinterpret_cast<MSGHANDLER>(&B::onDestroy));        // epic fail. 실행은 되지만 wndProc()에서 segfault

-----------
addMsgHndlr에 인수를 추가해서 msghandler의 owner를 추가로 기록하면서

B::wndproc을 overriding하고 owner가 아니면 다시 A::wndproc을 부르게 하면 될 것도 같지만 
그러면 이짓을 하는 의미가 없음.




추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
매크로 없이 만드는 메시지 맵 Epic Fail ㅋㅋㅋ [6] 나다라마법사(221.142) 12.02.20 78 0
303945 쿼리 날릴 때, 싱글 쿼테이션/더블 쿼테이션간에 차이가 있어? [1] 호석갤로그로 이동합니다. 12.02.19 284 0
303944 프갤에 몸 좋은 횽들 있음? 헬스같은거요 [4] [성대아싸]갤로그로 이동합니다. 12.02.19 101 0
303942 윈도우프로그래밍 하는데 C만 알아도되나요 [3] ㅇㅇ(211.117) 12.02.19 87 0
303941 PE 파일 패킹하는 프로그램 만들고 있는데 .. 통맥갤로그로 이동합니다. 12.02.19 51 0
303940 형들 위디스크에서 돈주고 게임받았는데 멀티가 안되요 ㅠㅠ [6] Aven갤로그로 이동합니다. 12.02.19 84 0
303938 파이썬 PIL 라이브라리 설치 실패 ;; [1] [성대아싸]갤로그로 이동합니다. 12.02.19 126 0
303937 이제 고3올라가는데 형들 뭐좀 여쭈어봐도 될까요 [8] 배재대가족(222.114) 12.02.19 111 0
303936 이제 메모리 관리 필요없지 않나여 ? [6] g(211.117) 12.02.19 98 0
303935 xp에서 usb꼽을때마다 악성코드 검출되는 경우 있지 않음? [2] 분당살람갤로그로 이동합니다. 12.02.19 72 0
303934 공돌이 대장님 봐주세요 ㅠ [5] 부경인갤로그로 이동합니다. 12.02.19 84 0
303933 부경님 보셈 공돌이대장갤로그로 이동합니다. 12.02.19 47 0
303932 쳌. [1] ㅇㅇㅎ(110.47) 12.02.19 58 0
303931 예전에 프갤에 이상한 말도 안되는글 쓰던사람 있지 않았음? [3] ㅇㅇㅇ(211.117) 12.02.19 98 0
303929 방금생각난건데 어데꿈개이상햇어 복룡갤로그로 이동합니다. 12.02.19 50 0
303928 이상한거 체크좀 부탁여 ~ dd(211.117) 12.02.19 25 0
303927 서울에 중소기업이나 중견기업 초봉이 보통 얼마나 됨? [2] 공돌이대장갤로그로 이동합니다. 12.02.19 159 0
303926 형들 이제 회사 입사하는데 몇가지 알아야 할것들좀 알려줘... [17] 인코더(121.186) 12.02.19 242 0
303925 피방에서아이디쳐야뚫는프로그램 ㅇㄷ(118.32) 12.02.19 78 0
303924 안녕하세요 y녀6디리(220.118) 12.02.19 59 0
303923 프로세스중... [18] 부경인갤로그로 이동합니다. 12.02.19 105 0
303922 에헤 에헤헤헤헷 [2] 코딩...?갤로그로 이동합니다. 12.02.19 44 0
303921 젖절한 방법 [5] elwlwlwk갤로그로 이동합니다. 12.02.19 109 0
303918 형님들 원래 질문을 하면 안되는데 저엉말 답답하고 궁금해서 ㅠ [7] 빌어먹을야옹갤로그로 이동합니다. 12.02.19 126 0
303917 좋은 아버지는 봅니다 ㅇㅇ(118.33) 12.02.19 44 0
303916 리눅스마스터 따놓으면 좀 도움 될려나 [4] 공돌이대장갤로그로 이동합니다. 12.02.19 134 0
303915 패킷분석까지 가능 할려면...?? [8] 패킷(221.161) 12.02.19 135 0
303914 아진짜 시발 컴고쳐달라고 부모님친구집에서자꾸부름 [8] 모미지갤로그로 이동합니다. 12.02.19 99 0
303913 밑에 이쁜 여개발자 어쩌고 글을 보고..... [1] 야요이갤로그로 이동합니다. 12.02.19 144 0
303912 함수부분 너무 복잡행.. [5] 코딩...?갤로그로 이동합니다. 12.02.19 96 0
303911 [질문]Direct 3D관련해서 질문해도 괜찮을까? [6] 산기대플머갤로그로 이동합니다. 12.02.19 117 0
303910 구조체배열에 비트맵핸들저장하믄안되? [3] CHALLENGER갤로그로 이동합니다. 12.02.19 64 0
303909 ㅇㅇ 형은 봅니다. 좋은아버지갤로그로 이동합니다. 12.02.19 47 0
303908 진지하게 한번 썰을 풀어봅니다. 관심 좀 가져 주시면 고맙겠습니다. [1] ㅇㅇ(121.177) 12.02.19 82 0
303905 이거 이렇게 짜면되나요 ? [4] dd(211.117) 12.02.19 50 0
303904 형들 나 내일 회사 합격 발표 나오는데 [4] 막장갤신학생갤로그로 이동합니다. 12.02.19 99 0
303903 안녕은 영원한 헤어짐은 아니겠지요~ [1] ㅋㄱ(183.96) 12.02.19 43 0
303901 형들 c언어 커맨드라인말고 윈도우창으로 표시할려면 어쩨야돼? [3] 래댁갤로그로 이동합니다. 12.02.19 68 0
303900 Press any key to continue가 안 나와요ㅠㅠ [10] 엔터(116.33) 12.02.19 287 0
303899 횽님들 혹시 내 위치를 디지털값으로 알아내는 방법 알고있나요? [24] (110.15) 12.02.19 163 0
303898 페고 떼지형 은 봅니다.2 [8] 좋은아버지갤로그로 이동합니다. 12.02.19 199 0
303897 형들의 도움이 필요합니다 ㅇㄹ(110.9) 12.02.19 28 0
303896 컴터 포맷해야 하는데.. [1] ☎v2.0™갤로그로 이동합니다. 12.02.19 51 0
303895 형들아 내가 마인크 플러그인이 [2] 12345(180.224) 12.02.19 59 0
303894 페고 떼지형 은 봅니다. [6] 좋은아버지갤로그로 이동합니다. 12.02.19 120 0
303893 회사가서 맞짱깐거 [5] 개심심(121.140) 12.02.19 194 0
303892 히밤 망한듯 ㅜㅜ gg(211.117) 12.02.19 42 0
303890 내가 날린 플렉스 파라미터 [4] 좋은아버지갤로그로 이동합니다. 12.02.19 112 0
303889 형들아 별찍기 이렇게하면 싸대기맞음? [2] gg(211.117) 12.02.19 130 0
303887 정보처리기사 2주 남았다.. [1] 공돌이대장갤로그로 이동합니다. 12.02.19 68 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2