放松C++中的void *铸造

在C语言中,将指针投向和投自于 void *.

移植到C++中的一个主要障碍是,当从处理通用指针的函数返回时,需要投掷指针,例如 malloc以及在我自己的代码中声明的函数,如 void *block_get(Blkno const blkno);.

然而,我的代码是打算用C语言编译的。 C++编译器成功。如果我为了C++的缘故,到处提供了显式的casts,那么它们一定是C式的casts,我可能会由于将非指针类型投向和从两种语言的指针类型投出而掩盖了bug。

我的引用错误如下。

struct Cpfs *cpfs = calloc(1, sizeof(*cpfs));

在MSVC中会产生:

错误2 错误C2440:”初始化”:不能从 “void *”转换为 “Cpfs *” e:\src\cpfs\cpfs.c 179

显然,我不能使用 newstatic_cast 如果我不再使用C语言,我自然会使用它。什么是提供最大的类型安全的最佳方式,围绕在 void *为每一种语言提供最小的啰嗦?

解决方案:

也许是这样的?(未经测试,没有编译器,不经常使用宏)。

#ifdef __cplusplus
    #define pointer_cast(type, pointer) reinterpret_cast<type>(pointer)
#else
    #define pointer_cast(type, pointer) (type)(pointer)
#endif

给TA打赏
共{{data.count}}人
人已打赏
未分类

用类似于VBS的win32com.client检索COM错误。

2022-9-8 13:12:37

未分类

如何获得网络访问AWS VPC?

2022-9-8 13:12:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索