与第三方库枚举设计问题的接口

时间:2019-03-26 05:53:02

标签: c enums

我有一个定义以下枚举的声音库:

libsnd.h

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

我正在设计一个应具有示例格式可配置的应用程序。精确地

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的宏

我看到的问题的解决方案是在

中定义自己的枚举

application.h

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

这会将可移植性问题留给application.c文件。但这是我想避免的样板。解决此问题的常用方法是什么?

0 个答案:

没有答案