我如何尝试将Value *转换为子类?

时间:2015-04-15 23:50:37

标签: c++ llvm

我有一个Value *列表,其中一些我知道是PHINode *。

我可以dynamic_cast<PHINode*>(value)查看它是否属于PHINode *,但我依旧回想起那里有更好的方式。

1 个答案:

答案 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表)。