我有一个Value *列表,其中一些我知道是PHINode *。
我可以dynamic_cast<PHINode*>(value)
查看它是否属于PHINode *,但我依旧回想起那里有更好的方式。
答案 0 :(得分:1)
经过大量的回顾,这两个问题间接回答了我的问题
llvm显然有一个内置的类型检查系统。有一个参考页面here。它像这样工作if(isa<PHINode>(value)){
PHINode* phi = cast<PHINode>(value);
}
if(PHINode* phi = dyn_cast<PHINode>(value)){//alternatively
...
}
看起来您似乎不需要指定它是指针,因此它不是isa<PHINode*>
最后,事实证明,dynamic_cast不会起作用,因为它们实现了自己的RTTI
LLVM源代码库广泛使用自定义形式的RTTI。 这些模板与C ++ dynamic_cast&lt;&gt;有许多相似之处。 操作员,但他们没有一些缺点(主要源于 dynamic_cast&lt;&gt;仅适用于具有。的类 v表)。