宏 获取结构体成员

#define OFFSET_OF(TYPE, MEMBER) ((uintptr_t)(&((TYPE *)0)->MEMBER))
#define GET_MEMBER(TYPE, STRUCTURE, MEMBER) (*((typeof(((TYPE *)0)->MEMBER)*) \
            ((void*)(OFFSET_OF(TYPE, MEMBER) + (uintptr_t)&STRUCTURE))))
#define PRINT_MEMBER(TYPE, STRUCTURE, MEMBER) std::cout << std::setw(15) << std::left \
            << "["#MEMBER "] of [" #STRUCTURE "]: " << GET_MEMBER(TYPE, STRUCTURE, MEMBER) << std::endl

    uintptr_t temp = -1;
    struct Block {
        int  _int;
        char _char;
    };
    Block block = {0, 'o'};
    temp = OFFSET_OF(Block, _char);
    std::cout << GET_MEMBER(Block, block, _char) << std::endl;
    PRINT_MEMBER(Block, block, _int);
    printf("temp = %u\n", temp);
    return 0;

o
[_int] of [block]: 0
temp = 4
 

发布了24 篇原创文章 · 获赞 14 · 访问量 6142

猜你喜欢

转载自blog.csdn.net/qq_35587463/article/details/104156557