함수 포인터 할당 질문
글쓴이: 호호호호 / 작성시간: 화, 2006/07/04 - 3:12오후
======================================================
class A
{
typedef void (*func)(int i);
func arrayF[10];
void insf(int i);
void regist();
};
void A::insf(int i)
{
return;
}
void A::regist()
{
arrayF[0] = insf;
}
======================================================
class A
{
typedef void (*func)(int i);
func arrayF[10];
static void insf(int i);
void regist();
};
void A::insf(int i)
{
return;
}
void A::regist()
{
arrayF[0] = insf;
}
======================================================
위 두개의 코드는
static void insf(int i);
이 함수의 static keyword를 넣고 안 넣은거 빼곤 완전히 동일 합니다.
하지만 static 을 넣지 않았을 경우 컴파일 에러가 발생합니다.
이 부분 잘 이해가 가질 않습니다.
명확하게. 설명 해 주실분 계신가요? ~
Forums:
함수포인터에
함수포인터에 할당할수 있는 함수는 호출규약이 cdecl이어야 합니다.
클래스의 멤버함수들은 호출규약이 thiscall 입니다. (this 포인터 처리하는거 외에는 stdcall과 같습니다). 그래서 함수포인터에 클래스의 멤버함수를 할당할 수 없는 겁니다.
그러나 static keyword를 붙이면 클래스의 멤버함수라도 호출규약이 cdecl로 됩니다.
그래서 static이 붙은 멤버함수들은 함수포인터에 할당가능하죠
함수호출규약에대해 찾아보시면 다른 많은 정보들이 있을껍니다.
참고로 이처럼 일반적인 멤버함수가 함수포인터에 할당되지 않는 문제를 해결하기 위한
다른 방법들도 있는걸로 알고 있습니다.
메쏘드 포인터를
메쏘드 포인터를 받을 때는 일반 함수 포인터를 받는 형식과는 다르게 사용합니다. 인스턴스가 필요하기 때문인데요, 자세한 내용은 여기를 참조하세요.
May the F/OSS be with you..
----------------------------
May the F/OSS be with you..
댓글 달기