java - 什么是 C++1 1's equivalent of Java' s instanceof

标签 java c++ c++11 instanceof multiple-languages

我想知道 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/

相关文章:

c++ - 在初始化对象上调用虚方法的段错误

C++ 检查字符串是否包含至少 1 个数字和 1 个字母

c++ - 为什么调用函数后会陷入死循环?

java - Java 中的 K-Ary 树和对称搜索/访问

java - 从两个 ArrayList 创建自定义对象对的 ArrayList

java - OpenAPI 生成器将 "no"转换为 "false"

c++ - 替代全局变量/常量

c++ - 寻找滥用枚举的替代方法

c++ - 如何断言 std::mutex 是否被锁定?

java - servlet 和 jsp 显示相同的信息?