gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:39:09 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com