dynamic_cast <void *>什么时候有用?</void *>

时间:2014-09-01 16:39:29

标签: c++ c++11 casting void-pointers dynamic-cast

5.2.7 / 7说的是:

  

如果T是&#34;指向cv void&#34;的指针,则结果是指向x指向的派生程度最高的类的指针。

这个synatx有什么好的应用?应该何时使用dynamic_cast<void*>

2 个答案:

答案 0 :(得分:26)

一个常见的原因是弄清楚两个接口IA*IB*实际上是指向同一个底层对象的指针。如果需要,请使用演员。

IIRC,它甚至可以在多重继承的情况下使用重复的非虚拟基础来拥有两个IA*指针,这些指针比较不相等,但指向同一个对象 - 因为它们指向两个不同的IA个子对象。

答案 1 :(得分:5)

当你有类似的东西时:

template<typename X, typename Y>
bool operator==(const X* px, const Y* py) {
     return dynamic_cast<void*>(px) == dynamic_cast<void*>(py);
}