【发布时间】:2016-02-03 13:07:50
【问题描述】:
我正在处理一种特殊情况,我不能直接使用dynamic_cast,因为对象是void*。是先使用static_cast,然后使用dynamic_cast(在static_cast的结果上)不好的做法吗?错了吗?
下面是我所说的一个例子:
MyClass* CastVoidPtr(void* pVoidPtr)
{
// casting it to MyClass so we could use dynamic_cast
MyClass* pTemp = static_cast<MyClass*>(pVoidPtr);
// returning the actual result that will make sure that we have a MyClass object or a nullptr
return dynamic_cast<MyClass*>(pTemp);
}
【问题讨论】:
-
pTemp已经是MyClass*,你希望dynamic_cast在这里做什么?您的评论没有意义 - 如果pVoidPtr是 nullptr,那么pTemp也会是,所以您仍然可以返回它。 -
如果
pVoidPtr不是MyClass类型,pTemp不是非空的吗? -
原始评论:只是为了增强@Barry 的评论:
return dynamic_cast<MyClass*>(pVoidPtr);应该可以完成这项工作。有关更多详细信息,请参阅答案。编辑评论:哦,我不知道这是不可能的。忘记我的评论。 -
@RolandSarrazin 你不能
dynamic_cast一个void指针。 -
@RolandSarrazin 如果只有 Bjarne 允许的话:(
标签: c++ void-pointers dynamic-cast static-cast