我想为read和write unix函数编写一个包装器,但read有一个const void指针参数,并写一个简单的void指针作为参数。
因此,像这样的原型,其中一个功能会失败:
typedef ssize_t (*genericStreamHandler)(int, const void*, size);
答案 0 :(得分:2)
如果代码需要允许不兼容的函数,请不要对函数签名进行原型设计。
以下编译没有警告/错误。
#include <stdio.h>
ssize_t file_read(int h, const void* b, int sz) {
if (b) return 0;
return h + sz;
}
ssize_t file_write(int h, void* b, int sz) {
if (b) return 0;
return h + sz;
}
//typedef ssize_t (*genericStreamHandler)(int, void*, int);
// v--- No function prototype
typedef ssize_t (*genericStreamHandler)();
int main(void) {
genericStreamHandler gFH1 = file_read;
genericStreamHandler gFH2 = file_write;
char buf[10];
return (*gFH1)(0, buf, 10) + (*gFH2)(0, buf, 10);
}
OTOH,更好的答案可能在于采用另一种方法,不需要变体函数签名的通用类型。