У меня есть звуковая библиотека, которая определяет следующее перечисление:
libsnd.h
* * 1004
enum sample_format {
signed_16bit_little_endian,
signed_16bit_big_endian,
//etc
};
Я разрабатываю приложение, которое должно иметь настраиваемый формат образца. Percisely
application.h
:
#include <libsnd.h> //<--- libsnd Here
typedef struct app_config_t app_config_t
app_config_t *cfgalloc();
void set_sample_format(app_config_t *cfg_ptr, enum sample_format sf);
main.c
#include <libsnd.h> //<--- libsnd Here
#include "application.h"
int main(int agrc, char *argv[]){
enum sample_format sf = //parse arguments and extract sample format
app_config_t *cfg_ptr = cfgalloc();
set_sample_format(cfg_ptr, sf); //<--- libsnd Here
}
При таком подходе я в настоящее время вижу следующие проблемы:
Он вводит тесную связь с libsnd.h
, поэтому переключение на другую библиотеку затруднительно.
В случае, если libsnd
не реализован для какой-либо конкретной платформы, я хочу перенести свое приложение на него, для этого потребуется либо его реализация самостоятельно, либо тонны #ifdef
-подобного макроса для всего приложения.
Решение проблемы, которую я вижу, состоит в том, чтобы определить мой собственный enum в
application.h
enum app_sample_format {
signed_16bit_little_endian,
signed_16bit_big_endian,
//etc
};
, что привело бы к проблемам переносимости в файл application.c
. Но это своего рода шаблон, который я хотел бы избежать. Каков общий подход к такой проблеме?