멤버함수포인터의 경우엔 함수이름 앞에 반드시 &를 붙여주는 것이 문법이다 말이지요.
VS6.0 에선 다음의 코드로 구성되어 있어요.
#define ON_COMMAND(id, memberFxn) \\
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)&memberFxn },
// ON_COMMAND(id, OnFoo) is the same as
// ON_CONTROL(0, id, OnFoo) or ON_BN_CLICKED(0, id, OnFoo)
분명히 memberFxn 앞에 &연산자가 붙어있어서 주소값을 전달하고 있죵... 아주 바람직한 현상...
허나, 2008로 넘어갈경우..
#define ON_COMMAND(id, memberFxn) \\
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSigCmd_v, \\
static_cast<AFX_PMSG> (memberFxn) },
// ON_COMMAND(id, OnBar) is the same as
// ON_CONTROL(0, id, OnBar) or ON_BN_CLICKED(0, id, OnBar)
오오미... memberFxn 앞에 &연산자가 없네용, 그런데도 불구하고 다음의 두 코드는 모두 정상 컴파일...
1. ON_COMMAND(ID_APP_ABOUT, CSingleApp::OnAppAbout)
2. ON_COMMAND(ID_APP_ABOUT, &CSingleApp::OnAppAbout)
이유가 무엇일까, 하여 설마 static_cast 때문에 그런가하여, 예제를 구성해서 확인했으나
static_cast와 무관하게 &는 붙여줘야 하더군요.
왜 &를 붙여도되고, 안붙여도 되는 상황이 2008 버젼에선 생기는지 아시는분?
#######내용추가#########
해당 멤버함수포인터의 정의는 다음과 같슴다(AFX_PMSG)
typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);
원래 함수포인터 특징이 그렇지 않나?
1하지만 MFC에서 쓰이는 건 \'멤버\' 함수 포인터임....
함수의 이름은 함수의 주소 아닌감
1 하지만 \'멤버\' 함수 포인터인데요?
아니 이사람들이~~~~
허접이라 더이상 모르겠음
자살춤은 아름답습니까?