/ / Як експортувати непрозорий тип в C - mysql, c, дизайн, модуль, портативність

Як експортувати непрозорий тип в C - mysql, c, дизайн, модуль, портативність

Я пишу програму, що включає MySQLбази даних, і я хочу мати всі операції, пов'язані з базою даних, в одному (або більше, в майбутньому) певних файлах. Мені потрібно експортувати ідентифікатор з'єднання з базою даних в інші модулі, щоб вони могли використовувати служби модуля БД.

В ідеалі це було б. (у db.h)

typedef ????? dbconn_t

в інших файлах

dbconn_t = db_newconnection(...);

Тип MySQL для підключень db називається MYSQL, тому я був схильний писати

typedef MYSQL *dbconn;

Але щоб зробити це, мені потрібно включити mysql.h у свій власний db.h, експортуючи тонни функцій та інші типи до решти проекту.

Деякі рішення приходять на думку:

  • Експортуйте тип int та зберігайте таблицю для відображення ints до покажчиків MYSQL

  • Експортуйте покажчик void і тип cast у кожному виклику в коді обробки даних бази даних

Обидва здаються досить погані. Будь-які ідеї, щоб допомогти цьому?

Відповіді:

2 для відповіді № 1

Ви могли б інкапсулювати свій ідентифікатор даних у тип структури.

Наприклад, у ваших приватних заголовках можна мати щось подібне

struct dbconn {
int id;
};

Хоча в заголовку ви експортуєте його як

struct dbconn;
typedef struct dbconn *dbconn_t;