История изменений
Исправление tp_for_my_bunghole, (текущая версия) :
Использовать name() для сравнения типа нельзя, можно только так
typeid(*sender) == typeid(Component)
Да, потому что std::type_info::name() implementation defined, везде по своему.
Но typeid() бросает исключение std::bad_typeid если аргумент в виде *t, a t нулевой указатель. Но аргумент может быть без оператора *, просто t, и в этом случае бросать исключение или нет, различается в компиляторах. Implementation defined.
dynamic_cast может бросать исключение std::bad_cast в зависимости от вида аргумента.
В Java стандарте есть checked exceptions, компилятор видит где бросаются исключения(throws) и требует добавлять обработчики для этого.
В Object Pascal оператор as не бросает исключение если object нулевой указатель:
object as SomeClass
object as SomeInterface
Eсли типы несовместимы(Object не находится в иерархии Class или приводимый тип ниже в иерархии чем object), то бросает исключение EInvalidCast. Потому рекомендуется использовать проверку перед этим:
if Object is SomeClass then
Исходная версия tp_for_my_bunghole, :
Использовать name() для сравнения типа нельзя, можно только так
typeid(*sender) == typeid(Component)
Да, потому что std::type_info::name() implementation defined, везде по своему.
Но typeid() бросает исключение std::bad_typeid если аргумент в виде *t, a t нулевой указатель. Но аргумент может быть без оператора *, просто t, и в этом случае бросать исключение или нет, различается в компиляторах. Implementation defined.
dynamic_cast может бросать исключение std::bad_cast в зависимости от вида аргумента.
В Java стандарте есть checked exceptions, компилятор видит где бросаются исключения(throws) и требует добавлять обработчики для этого.
В Object Pascal оператор as не бросает исключение если object нулевой указатель:
object as Class
object as Interface
Eсли типы несовместимы(Object не находится в иерархии Class или приводимый тип ниже в иерархии чем object), то бросает исключение EInvalidCast. Потому рекомендуется использовать проверку перед этим:
if Object is Class then