我正在尝试向 API 添加一些附加功能。但是,我希望这些附加功能位于我的外部库中,而不是与原始库的代码混合。
当我需要从我的函数访问上述 API 的静态函数时,问题就来了。我当然不能,所以我看到的唯一解决方案是要么将这些函数的代码复制到我的 API 中,要么使它们在原始 API 中成为非静态的。出于显而易见的原因,这两个对我来说都不是太好的选择。
更准确地说:
original_api.c
void some_function() -> uses some_helper_function()
static some_helper_function()
my_api_extension.c
void some_extended_function() -> needs to use some_helper_function from original_api.c, but can't
您能建议哪种方法最灵活地处理这个问题吗?
我想指出它只与 C 有关,与 C++ 无关。
最佳答案
- 将函数设为静态。
- 用指向这些函数的指针创建一个 extern
struct
。在单独的#include
文件中声明它,该文件可供扩展程序使用,但不适用于整个世界。 - 在您的扩展中使用
结构
。
像这样:
// in the private header
typedef struct
{
void (*p_myfunc1)(int);
int (*p_myfunc2)(void);
} privateAPI_t;
extern privateAPI_t privateAPI;
// in the library
static void myfunc1(int);
static int myfunc2(void);
privateAPI_t privateAPI = { myfunc1, myfunc2 };
// in the extension
#include <privateAPI.h>
...
privateAPI.p_myfunc1(privateAPI.p_myfunc2());
关于c - 以灵活且不显眼的方式在 C 中扩展 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7254278/