在 C 中,将指针转换为void *
.
移植到 C++ 的一个主要障碍是在从处理泛型指针(malloc
例如void *block_get(Blkno const blkno);
.
但是,我的代码旨在由 C和C++ 编译器成功编译。如果我为了 C++ 而在任何地方都提供了显式转换,那么它们必须是 C 风格的转换,并且由于在两种语言的指针类型之间转换非指针类型,我可能会掩盖错误。
我的参考错误如下:
struct Cpfs *cpfs = calloc(1, sizeof(*cpfs));
在 MSVC 中产生:
错误 2 错误 C2440: 'initializing' : 无法从 'void *' 转换为 'Cpfs *' e:\src\cpfs\cpfs.c 179
显然我不能使用new
,或者static_cast
如果我不再使用 C,我自然会使用它。为每种语言提供最大类型安全性的最佳方法是什么?void *