1
我們需要一個應用程序,在發佈版本中我們需要斷言,我們想開發類似於XXX_ASSERT的東西,但問題出在MFC中,ASSERT可以將任何booleanExpression作爲參數並評估,但是如果我們編寫自定義斷言例如MY_ASSERT比如何實現自定義斷言將評估任何布爾表達式。如何編寫自定義斷言?
#include<afxwin.h>
#include <stdlib.h>
void abort()
{
AfxMessageBox(_T("Test"));
}
#define MY_ASSERT(BoolCondition) do { if (!(BoolCondition)) { abort(); } } while (0)
class CAge:public CObject
{
public:
int m_nAge;
CAge(int age)
{
m_nAge = age;
}
};
class MyFrame:public CFrameWnd
{
public:
MyFrame()
{
Create(0,_T("Hello"));
}
void OnPaint()
{
CPaintDC d(this);
CBrush r;
r.CreateSolidBrush(RGB(25,200,152));
d.SelectObject(&r);
d.Rectangle(100,100,250,250);
r.DeleteObject();
CAge *pAge;// = new CAge(21);
MY_ASSERT(pAge);
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
class MyApp:public CWinApp
{
int InitInstance()
{
MyFrame *p = new MyFrame();
p->ShowWindow(3);
m_pMainWnd = p;
return 1;
}
};
MyApp a;
在MFC斷言,參數可以是如int或類的對象,但在MY_ASSERT該參數將是什麼。如果你提供我的例子,這將是很好的。 –
這可能是一個愚蠢的問題,但爲什麼圍繞條件的1迭代循環呢? –
@MehulDonga這個宏可以和任何'int'一起工作,它可以和任何一種隱式轉換爲'bool'的類一起工作。我無法想象MFC聲明與任何不準備測試的類一起工作? –