Взаимодействие со сторонними разработчиками enum - PullRequest
1 голос
/ 26 марта 2019

У меня есть звуковая библиотека, которая определяет следующее перечисление:

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
}

При таком подходе я в настоящее время вижу следующие проблемы:

  1. Он вводит тесную связь с libsnd.h, поэтому переключение на другую библиотеку затруднительно.

  2. В случае, если libsnd не реализован для какой-либо конкретной платформы, я хочу перенести свое приложение на него, для этого потребуется либо его реализация самостоятельно, либо тонны #ifdef -подобного макроса для всего приложения.

Решение проблемы, которую я вижу, состоит в том, чтобы определить мой собственный enum в

application.h

enum app_sample_format {
    signed_16bit_little_endian,
    signed_16bit_big_endian,
    //etc
};

, что привело бы к проблемам переносимости в файл application.c. Но это своего рода шаблон, который я хотел бы избежать. Каков общий подход к такой проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...