メインアプリケーションにアクセスさせたいこのようなルーチンがある場合...
char* get_widget_name(widget_t* w) {
return name(w);
}
次の両方のマクロは、明らかにget_widget_name内で使用しながら「非表示」にします
#define GET_WIDGET(self) (&(self)->base.widget)
#define name(self) (GET_WIDGET(self)->name)
私は基本的に、構造体でユニオンを使用して、CでのC++継承を「エミュレート」しています。