c – static_cast是否可以使用void *指针

例如,建议map< int,void *> hold其中void *始终存储来自classA的指针,以后通过static_cast将其强制转换是否安全?
classA* ptr = static_cast<classA*>( holditerator->second );

使用void *的原因是因为hold是某些cpp文件所使用的标头上定义的类的成员,这些文件不知道classA是什么.我必须在这些cpp文件中包含classA定义的标头,这是由于许多原因无法完成的.

解决方法

是的,在这种情况下,static_cast是正常的并且正确使用.

我不得不问你为什么不在第一时间存储classA *指针.如果要将派生类指针放入其中,请注意,在将它们放入映射之前,需要将派生类指针upcast / upconvert(隐式或显式)转换为classA *.

但即使您将派生类指针放入映射中,基类指针也足够了,因为派生类指针可以隐式转换为基类指针.

The reason void* is used is because hold is member of a class define on a header used by some cpp files which don’t kNow what classA is.

这可能是防止分层违规的正当理由.

I would have to include the header of classA deFinitions on these cpp files which can’t be done by many reasons.

在您的情况下,这可能不是必需的.前瞻性声明就足够了.如果标题知道放入地图的内容,但只是想避免包含其他标题,那么这就是要走的路.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...