pez*_*pez 8 c++ java instanceof multiple-languages c++11
我想知道现代C++ 11相当于Java的实例.我已经看过这个SO帖子,但它已经很老了,并且想知道在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:
}
}
Run Code Online (Sandbox Code Playgroud)
我的基类没有任何虚拟方法或函数.我代表解析器的表达式树,基类只是一个多态持有者 - 就像Haskell/OCaml中的ADT一样.
Ker*_* SB 12
同样的答案仍然适用,并且在C++中一直是这样的:
if (C * p = dynamic_cast<C *>(&obj))
{
// The type of obj is or is derived from C
}
else
{
// obj is not a C
}
Run Code Online (Sandbox Code Playgroud)
这种结构需要A是多态的,即具有虚拟成员函数.
另请注意,此行为与比较不同typeid(obj) == typeid(C),因为后者测试精确类型标识,而动态转换以及Java instanceof仅测试目标类型是最派生对象类型的基类.
| 归档时间: |
|
| 查看次数: |
9054 次 |
| 最近记录: |