我想知道 Java 的 instanceof 在现代 C++11 中的等价物是什么。我看过这个SO post但它已经很老了,想知道 C++11 中是否有更现代、更好的解决方案?
我希望有可能使用 switch 构造而不必求助于手动枚举类。
class A {
};
class B : public A {
}
class C : public A {
}
on_event(A& obj)
{
switch (obj) {
case A:
case B:
case C:
}
}
我的基类没有任何虚方法或函数。我代表一个解析器的表达式树,基类只是一个多态持有者——就像 Haskell/OCaml 中的 ADT。
最佳答案
同样的答案仍然适用,并且在 C++ 中一直是这样的:
if (C * p = dynamic_cast<C *>(&obj))
{
// The type of obj is or is derived from C
}
else
{
// obj is not a C
}
此构造要求 A
是多态的,即具有虚拟成员函数。
另请注意,此行为不同于比较 typeid(obj) == typeid(C)
,因为后者测试确切的类型标识,而动态转换以及 Java 的 >instanceof
,只测试目标类型是最派生对象类型的基类。
关于java - 什么是 C++1 1's equivalent of Java' s instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325314/