C++ Macro to D mixin template, delegates Please help
BLS
nanali at nospam-wanadoo.fr
Thu Sep 20 07:29:59 PDT 2007
Please have a look on my translation.
Problems are
1) porting C++ macros
2) use of delegates within template mixins
/* THE C++ Stuff , a fragment
class CMsg
{
public:
virtual BOOL NewMsgProc(HWND hWnd, UINT uID, WPARAM wParam, LPARAM
lParam,LRESULT lResult)
{
return FALSE;
}
};
#define BEGIN_MSG_MAP() \
public: \
virtual BOOL NewMsgProc(HWND hWnd, UINT uID, WPARAM wParam, LPARAM
lParam,LRESULT& lResult) \
{ \
#define ON_WM_CLOSE(vfunc)\
if (uID == WM_CLOSE) \
{ \
lResult =vfunc(); \
return lResult; \
}
// and so on ............
class CWin : public CMsg
{
public:
virtual BOOL OnClose()
{
return TRUE;
}
BEGIN_MSG_MAP()
ON_WM_CLOSE(OnClose)
ON_WM_DESTROY(OnDestroy)
ON_WM_NCDESTROY(OnNcDestroy)
END_MSG_MAP_DEFAULT()
}
EOF C++ stuff */
THE D port
module dgt.win;
// All Window's messages will be mapped in this function
class CMsg
{
public:
bool NewMsgProc(HWND hWnd, UINT uID, WPARAM wParam, LPARAM
lParam,LRESULT lResult)
{
return false;
}
}
template ON_WM_CLOSE(D) (D delegate() dg)
{
if (uID == WM_CLOSE)
{
lResult = dg();
return lResult;
}
}
template ON_MESSAGE_RANGE(M1, M2, D) (M1 MsgF, M2 MsgL, D delegate(...) dg )
{
if(uID >= MsgF && uID <= MsgL)
{
lResult = dg(uID, wParam, lParam);
return true;
}
}
// Window
class CWin : CMsg
{
public:
bool onClose()
{
return true;
}
override bool NewMsgProc(HWND hWnd, UINT uID, WPARAM wParam, LPARAM
lParam, ref LRESULT lResult)
{
mixin ON_WM_CLOSE!(&CWin.OnClose);
}
}
--------------------
Okay, I've ported it as good as I can... the available tutorials are not
very helpfull in this case. So please help
Bjoern
More information about the Digitalmars-d-learn
mailing list