Possible Duplicate:
C++ equivalent of instanceof
我想知道 dynamic_cast
和 typeid
之间的区别仅在于类比较(除了 dynamic_cast
允许访问子类的方法和 typeid
仅对类比较有用)。我发现一个两年前的 StackOverflow 也在问同样的问题:
C++ equivalent of java's instanceof .但是,它已经有两年了,我不想删除旧帖子(我不确定 typeid
什么时候出来),所以我想重新问同样的问题,但略有不同。
基本上,我有类 A
和类 B
,它们都是抽象类 C
的子类。类 C
被作为方法的参数接收,我想确定类 C
是真的类 A
还是类 B
。 typeid
和 dynamic_cast
都可以正常工作,因此这更多的是最佳实践/性能问题。我猜:
A* test = dynamic_cast<A*> someClassCVar
if (test != 0) { //it is of class A }
或
if (typeid(someClassCVar) == typeid(A)) {
//it is of class A
}
编辑:抱歉,我忘记包含这一点信息。 ActiveMQ CMS 文档声明使用 dynamic_cast
,但我认为这只是因为它假定用户会想要访问特定于子类的方法。对我来说,如果只需要一个类比较,似乎 typeid
会更好:
https://activemq.apache.org/components/cms/overview
最佳答案
这两种方法有一个重要的区别:
if(A* test = dynamic_cast<A*>(&someClassCVar)) {
// someClassCVar is A or publicly derived from A
}
鉴于:
if(typeid(someClassCVar) == typeid(A)) {
// someClassCVar is of class A, not a derived class
}
关于用于类比较的 C++ dynamic_cast vs typeid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704893/