宏 獲取結構體成員

#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
 

發佈了19 篇原創文章 · 獲贊 7 · 訪問量 5153
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章