[C/C++] 클래스에서 함수포인터 배열 만들고 사용하기
Posted on 2008/04/25 22:20
Filed Under Computer languages
이 글은 Jake 에 의해 www.jakeworld.net 에서 작성되었습니다.
- 퍼가실 때는 이 박스와 함께 복사해주세요.
일반적으로 만드는 함수포인터 배열을 만드는 방법으로 클래스 내부에서 메소드의 포인터 배열을 만드는 방법을 알아봅시다.
일반적인 함수포인터 배열 생성은 다음과 같습니다.
typedef 리턴타입 (*재정의식별자)(인자...);
재정의타입 pFunc[n];
재정의타입 pFunc[n];
음 한글로 쓰니까 더 어렵네요? ㅡㅡ;
예를 들어보지요.
//Function int Add(int param1, int param2); int Div(int param1, int param2); //Function Pointer Array typedef int (*FuncType)(int,int); FuncType pFunc[2]; pFunc[0] = Add; pFunc[1] = Div; //Call pFunc[0](5,6); pFunc[1](6,2);
일반적으로 위와 같은 형태를 사용하지요.
하지만 이것들을 클래스 내부에 적용시키면 에러가 뜨게됩니다.
자세한 이유는 저도 모르겠네요 ^^
어찌됬건 해결 방법은 다음과 같습니다.
제가 사용했던 예제를 보여드리겠습니다.
enum{
PT_GRAY_HISTOGRAM = 0,
PT_COLOR_HISTOGRAM,
PT_3D_DIST,
//...................
PT_NUM
};
typedef void (CProcess::*method_def)(IplImage* ,IplImage* );
method_def pProcess[PT_NUM];
pProcess[PT_GRAY_HISTOGRAM] = &CProcess::GHistogram;
pProcess[PT_COLOR_HISTOGRAM] = &CProcess::CHistogram;
pProcess[PT_3D_DIST] = &CProcess::Dist3D;
void CProcess::ImageProcess(int PROCESS_TYPE , IplImage* OrgImage, IplImage* DestImage)
{
(this->*pProcess[PROCESS_TYPE])(OrgImage,DestImage);
}
요약하면
*선언할 때 재정의 식별자 앞에 클래스명을 적어야 함.
*대입할 때 주소연산자에 클래스명을 붙여야함.
*사용할 때 this->* 를 붙여야 함.
가 되겠습니다.
'Computer languages' 카테고리의 다른 글
| [VisualStudio] Visual studio 의 효과음 설정하기 (1) | 2008/05/14 |
|---|---|
| [MFC] MFC에서 콘솔창 띄우기 (0) | 2008/05/08 |
| [C/C++] 클래스에서 함수포인터 배열 만들고 사용하기 (2) | 2008/04/25 |
| [VisualStudio] Visual C++ 2008 feature pack released (0) | 2008/04/08 |
| [C/C++] 배열을 이용한 장난 (0) | 2008/03/31 |
| [VisualStudio] 비주얼 스튜디오 C++ 에러 검출하기 (GetLastError) (2) | 2008/03/01 |




댓글을 달아 주세요
Jeonhwan L. Yang 2008/05/22 12:45 댓글주소 수정/삭제 댓글쓰기
호출방식의 차이로 인해 에러가발생합니다.
thiscall 과 cdecl 두가지 차이이죠^^ 자세한건 찾아보세요^^
이곳저곳 떠돌다가 몇 자 적고 갑니다.
아 호출방식의 차이는 본 적이 있는데 , 그 때문이였군요 ^^ 감사합니다.