9
如何在某些平台上可移植地调用一个采用char **且在其他平台上采用const char **的C ++函数?
在我的Linux(和OS X)计算机上,该iconv()函数具有以下原型: size_t iconv (iconv_t, char **inbuf... 在FreeBSD上,它看起来像这样: size_t iconv (iconv_t, const char **inbuf... 我希望我的C ++代码可以在两个平台上构建。对于C编译器,传递char**for const char**参数(反之亦然)通常仅发出警告;反之亦然。但是在C ++中,这是一个致命错误。因此,如果传递a char**,它将无法在BSD上进行编译,如果传递a const char**,则将无法在Linux / OS X上进行编译。如何在不借助检测平台的情况下编写可在两者上进行编译的代码? 我的一个(失败)想法是提供一个本地原型,该原型将覆盖标头提供的任何原型: void myfunc(void) { size_t iconv (iconv_t, char **inbuf); iconv(foo, ptr); } 这失败,因为iconv需要C链接,并且您不能放入extern "C"函数中(为什么不这样?) 我想出的最佳工作思路是强制转换函数指针本身: typedef void (*func_t)(iconv_t, const char **); ((func_t)(iconv))(foo, ptr); 但这有可能掩盖其他更严重的错误。
91
c++
const
portability