작업들 -> 잡 게시판 또는
http://www.hind.pe.kr/zb41/zboard.php?id=Note4About 에
쓰시면 됩니다 ^^
뭐 꼭 질/답 뿐만 아니라, 잡담을 쓰시고 싶으신 경우에도
상관 없구요 ^^
그럼 많은 애용(???) 바랍니다 ^^
WPARAM과 LPARAM에 대한 의미를 전혀 모른다면 차라리 다른 문서들(CodeProject 안에도 상당히 많습니다.)을 읽고 이해하고 들어가는 것이 좋을듯 싶습니다. CDialog를 띄워주는 WTL SplitterWindow를 가진 MFC CFrameWnd를 생성해 본적 이 있습니다. -- 물론 시연이 끝났을때는 전부 WTL 코드로 수정해 버렸죠) class CMyWnd : public CWindowImpl< CMyWnd >
{
...
};
template < class T >
class B1
{
public:
void SayHi()
{
T* pT = static_cast< T* >(this); // 허걱? 이 부분을 아래에 설명하겠습니다.
pT->PrintClassName();
}
protected:
void PrintClassName() { cout << "This is B1"; }
};
class D1 : public B1< D1 >
{
// 전체적으로 오버라이딩 된 함수가 없습니다.
};
class D2 : public B1< D2 >
{
protected:
void PrintClassName() { cout << "This is D2"; }
};
main()
{
D1 d1;
D2 d2;
d1.SayHi(); // prints "This is B1"
d2.SayHi(); // prints "This is D2"
}
class D3 : public B1< D2 >
this은 D1*과 D2* 형에 대해서만 안정성을 보장 받을 수 있고 그 외에 것에서는 해당되지 않습니다. 주의할점은 이 방법에서 적용된 방법은 일반적인 C++ 다형성과 거의 동일한 형태이기 때문에, SayHi() 메소드는 가상함수가 되지 않습니다.void B1< D1 >::SayHi()
{
D1* pT = static_cast< D1* >(this);
pT->PrintClassName();
}
void B1< D2 >::SayHi()
{
D2* pT = static_cast< D2* >(this);
pT->PrintClassName();
}
class CMyWindow : public CWindowImpl
{
public:
DECLARE_WND_CLASS(_T("My Window Class"))
};
class CMyWindow : public CWindowImpl
{
public:
DECLARE_WND_CLASS(_T("My Window Class"))
BEGIN_MSG_MAP(CMyWindow)
END_MSG_MAP()
};
Copyright © 2015-2025 Socialdev. All Rights Reserved.