我有这段代码:
ASTContext::DynTypedNodeList NodeList = ASTC->getParents(*DRE);
ast_type_traits::DynTypedNode ParentNode = NodeList[0];
/*some code here to determine if the NodeKind is ImplicitCastExpr*/
const ImplicitCastExpr* ParentICE = ParentNode.get();
基本上,它获取匹配节点的父节点然后如果它是一个
ImplicitCastExpr()
,我希望将节点作为一个节点并进一步完成
检查。
当我尝试编译代码时,对于DynTypedNode::get()
,我得到了这个:
mutator-lvl0.cpp:1644:30: error: no matching member function for call to 'get'
ParentICE = ParentNode.get();
~~~~~~~~~~~^~~
/home/bloodstalker/llvm/llvm/llvm/tools/clang/include/clang/AST/ASTTypeTraits.h:233:12:
note: candidate template ignored: couldn't infer template argument 'T'
const T *get() const {
这是标题中的声明:
template <typename T>
const T *get() const {
return BaseConverter<T>::get(NodeKind, Storage.buffer);
}
我做错了什么?
答案 0 :(得分:3)
此处的模板参数T
:
template <typename T>
const T *get() const { ... }
是非推断的上下文。它不能从函数调用的参数中推断出来。您试图在不提供T
类型的情况下调用此函数,因此会出错。
你需要写:
const ImplicitCastExpr* ParentICE = ParentNode.get<ImplicitCastExpr>();
// ^^^^^^^^^^^^^^^^^^