【发布时间】:2017-11-13 17:22:02
【问题描述】:
在我的 C 编程中,我使用 opaque-pointers 来构建结构,以这种方式强制对我的代码进行抽象和封装:
interface_header.h:
typedef struct s_mytype t_mytype;
defs_header.h:
struct s_mytype
{
/* Actual definition of the struct */
};
我的问题是我想使用一个简单的类型作为t_mytype(例如char),但不通知接口。我不能只使用typedef char t_mytype,因为这会暴露类型的内部。
我可以只使用 void 指针,但要以类型检查为代价,我宁愿避免这样做。
执行两个 typedef 也不起作用,因为这会从编译器中抛出一个 typedef redefinition with different types。
我也在考虑做一个只有一个成员的结构,这将是我的简单类型,但这会不会有点矫枉过正?
感谢您的回答。
【问题讨论】:
-
如果你需要一个不透明的类型,结构是必要的。决定是不透明还是简单更重要。请记住,您将传递指针。
-
使用单个成员。这是您的源代码 中的一些样板,但编译后的代码应该不会有所不同。
-
你能做类似
sockaddr和sockaddr_in的实现方式吗? -
@MFisherKDX Ewww! (以及如何解决问题?)
-
@FelixPalmen -- 在您的 API 中公开
sockaddr并在您的实现中使用sockaddr_in??.
标签: c typedef encapsulation opaque-pointers