如何在C中导出opaque类型

时间:2013-09-25 04:49:02

标签: mysql c module portability

我正在编写一个涉及MySQL数据库的应用程序,我想在一个(或更多,将来)特定文件中进行所有与数据库相关的操作。我需要将数据库连接ID导出到其他模块,以便他们可以使用DB模块的服务。

理想情况下,这将是。 (在db.h中)

typedef ????? dbconn_t

在其他文件中

dbconn_t = db_newconnection(...);

数据库连接的MySQL类型称为MYSQL,所以我倾向于编写

typedef MYSQL *dbconn;

但要做到这一点,我需要在我自己的db.h中包含mysql.h,将大量函数和其他类型导出到项目的其余部分。

我想到了一些解决方案:

  • 导出一个int类型并保留一个表,用于将整数映射到MYSQL指针

  • 在数据库处理代码

  • 中的每次调用中导出void指针并键入cast

两者看起来都很糟糕。有什么想法可以帮到你吗?

1 个答案:

答案 0 :(得分:2)

您可以将数据ID封装到结构类型中。

例如,在您的私有标题中,您可以使用

struct dbconn {
     int id;
};

在标题中,您将其导出为

struct dbconn;
typedef struct dbconn *dbconn_t;