Подтвердить что ты не робот

Когда dynamic_cast <void *> полезен?

5.2.7/7 говорит что-то вроде:

Если T является "указателем на cv void", результатом является указатель на самый производный класс, на который указывает x.

Какое хорошее применение этого синтакса? Когда следует использовать dynamic_cast<void*>?

4b9b3361

Ответ 1

Одной из распространенных причин является выяснение того, являются ли два интерфейса IA* и IB* фактическими указателями на один и тот же базовый объект. Если вам это нужно, используйте бросок.

IIRC, возможно даже в случае множественного наследования с повторяющейся не виртуальной базой иметь два указателя IA*, которые сравнивают неравные, но указывают на один и тот же объект, потому что они указывают на два разных подобъекта IA.

Ответ 2

Если у вас есть что-то вроде:

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