如何实现 C 语言中的 Java 的 instanceof
在 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