读书人

“产业级” 断言

发布时间: 2012-12-27 10:17:09 作者: rapoo

“工业级” 断言

class Assert{public:    Assert():SMART_ASSERT_A(*this), SMART_ASSERT_B(*this) {}    Assert& SMART_ASSERT_A;    Assert& SMART_ASSERT_B;    //whatever member functions    Assert& print_current_val(int i,const char* c)    {        printf("%s=%i\n", c, i);        return *this;    }    Assert& print_current_val(const char * i,const char* c)    {        printf("%s=%s\n", c, i);        return *this;    }    Assert& print_context(const char * info, const char* c, int i)    {        printf("ASSERT FAIL:%s\nFILE:%s, LINE:%i\n", info, c, i);        return *this;    }};Assert& make_assert(){    static Assert a;    return a;}#define SMART_ASSERT_A(x) SMART_ASSERT_OP(x,B)#define SMART_ASSERT_B(x) SMART_ASSERT_OP(x,A)#define SMART_ASSERT_OP(x,next) \    SMART_ASSERT_A.print_current_val((x),#x).SMART_ASSERT_##next#define SMART_ASSERT(expr) \    if( (expr) ) ; \    else make_assert().print_context(#expr, __FILE__,__LINE__).SMART_ASSERT_A#define _ASSERT SMART_ASSERT

?

读书人网 >编程

热点推荐