如何编写自定义断言?

时间:2012-10-11 08:08:52

标签: c++ c++11 visual-c++ mfc assert

我们需要一个应用程序,在发布版本中我们需要assert并且我们希望开发类似XXX_ASSERT的东西,但问题在于MFC ASSERT可以将任何booleanExpression作为参数并评估这个但是如果我们编写自定义断言,例如MY_ASSERT比如何实现自定义断言将评估任何booleanExpression。

#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;

1 个答案:

答案 0 :(得分:4)

对于任何布尔表达式,直接方法应该可以正常工作:

#include <stdlib.h>
#define MY_ASSERT(BoolCondition) do { if (!(BoolCondition)) { abort(); } } while (0)
相关问题