如何编写自定义断言
How to write Custom Assert?
我们需要一个应用程序,在发布版本中我们需要断言,我们想开发类似XXX_ASSERT的东西,但问题是在MFC ASSERT可以将任何布尔表达式作为参数并对此进行评估,但是如果我们编写自定义断言,例如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;
前向方法应该适用于任何布尔表达式:
#include <stdlib.h>
#define MY_ASSERT(BoolCondition) do { if (!(BoolCondition)) { abort(); } } while (0)
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- C ++ Google test (gtest):如何创建自定义断言和期望?
- 如何编写自定义断言
- 在VS2012单元测试中创建和测试自定义MFC CEdit时,在第21行的afxwin1.inl中断言
- 为什么自定义静态断言的实现不会立即静态断言"true"?
- 带有自定义消息的基于模板的编译时断言只能在某些编译器中编译
- 自定义类指针的优先级队列断言错误
- 调试断言失败与字符串流::灌输和自定义全局运算符新
- 在c++单元测试器中自定义断言