Как достичь C-эквивалента экземпляра экземпляра Java в Java
В Java оператор «instanceof» позволяет определить, принадлежит ли объект объекту конкретный класс или интерфейс. В C существует несколько методов достижения этой функциональности.
Динамическое приведение с RTTI
Один из подходов — использование динамического приведения с включенной информацией о типе времени выполнения (RTTI). Для этого необходимо включить необходимые заголовки:
#include
#include
И затем вы можете выполнить динамическое приведение, используя:
if(NewType* v = dynamic_cast(old)) {
// old was safely casted to NewType
v->doSomething();
}
Обратите внимание, что этот подход требует, чтобы в вашем компиляторе была включена поддержка RTTI.
Виртуальные функции
Другой метод — использовать виртуальные функции. Вы можете определить виртуальную функцию в базовом классе и переопределить ее в производных классах. Затем вы можете проверить динамический тип объекта, вызвав его виртуальную функцию:
class Base {
public:
virtual void doSomething() {}
};
class Derived : public Base {
public:
void doSomething() override {}
};
...
if(auto* derived = dynamic_cast(old)) {
derived->doSomething();
}
Переключение типа
Наконец, вы можете использовать переключатель типа для определения динамического типа объекта. Этот подход основан на классе type_info:
if(old.IsSameAs(typeid(NewType))) {
// old was safely casted to NewType
NewType* v = static_cast(old);
v->doSomething();
}
Соображения
Хотя эти методы предлагают функциональные возможности, аналогичные Java-оператору "instanceof", важно помнить, что динамическое приведение типов и проверка типов могут привести к снижению производительности. Рекомендуется рассмотреть возможность использования альтернативных подходов, таких как виртуальные функции или переключатели типов, для повышения производительности в критически важных приложениях.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3