zoukankan      html  css  js  c++  java
  • c++ 编译时检测结构体大小的的宏定义写法

    一种写法:

    template <bool>
    struct CompileAssert {
    
    };
    
    #define COMPILE_ASSERT(expr, msg) 
        typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
    
    } //endof namespace

    第二种写法:  

     1 #define CAT_TOKEN_1(t1,t2) t1##t2
     2 #define CAT_TOKEN(t1,t2) CAT_TOKEN_1(t1,t2)
     3 
     4 #define COMPILE_ASSERT(x)  
     5                     enum {CAT_TOKEN (comp_assert_at_line_, __LINE__) = 1 / !!(x) };
     6 
     7 #ifndef CHECK_SIZE
     8 #define CHECK_SIZE(type, size) extern int sizeof_##type##_is_##size [!!(sizeof(type)==(size_t)size) - 1]
     9 #endif//CHECK_SIZE
    10 
    11 #ifndef CHECK_OFFSET
    12 #define CHECK_OFFSET(type, member, value) 
    13         extern int offset_of_##member##_in_##type##_is_##value 
    14     [!!(__builtin_offsetof(type,member)==((size_t)(value))) - 1]
    15 #endif//CHECK_OFFSET
  • 相关阅读:
    BZOJ1941Hide and Seek
    数学与树学(娱乐向)
    树状数组(模板)
    BZOJ2716天使玩偶
    BZOJ3262陌上花开
    BZOJ3781小B的询问
    BZOJ3236作业
    Bsgs模板
    HNOI2008明明的烦恼
    BZOJ1211树的计数
  • 原文地址:https://www.cnblogs.com/jhj117/p/6346845.html
Copyright © 2011-2022 走看看