StenSoft のコメントを詳しく説明すると、メンバーの値data
しか知らない場合、それを含む構造体を取得することはできません。
しかし、そのアドレスがわかっている場合は、以下を見つけることができるT** member_addr
としましょう:node
void * ma = static_cast<void *>(member_addr); // convert pointer to void * : legal
intptr_t ima = static_cast<intptr_t>(ma); // convert void * to intptr_t : legal
intptr_t ina = ima - offsetof(struct node, data); // legal by definition of offestof
void * na = static_cast<void *>(ina); // convert intptr_t to void * : legal
struct node *pn = static_cast<node *>(na); // convert void * to pointer : legal provided the initial void * pointer points to a correct object
もちろん、これはすべて C++11 以降でのみ有効です。