在 C 程序中,我有一个结构
typedef struct {
void *payload; // opaque, real type known to callbacks
... some stuff ...
} MiddleMan;
为了创建一些类型安全的饰面,我可能会创建 getter 和 setter
CbData *get_cb_data(const MiddleMan *mm){ return mm->payload; }
void set_cb_data(MiddleMan *mm, CbData *cbd){ mm->payload = cbd; }
或者我可以尝试使用一个基于指针的访问器
CbData **cb_data(MiddleMan *mm){return (CbData**)&mm->payload;}
现在第二种解决方案看起来比第一种更狡猾,而且它也将用户限制为非常量,mm
即使他们只想阅读。但我的问题是它是否甚至是合法的C?
我相当确定你可以在任何void*
与CbData*
. 但是任何人都可以给出明确的理由,为什么这通常是(或不是)有效的?