clang :: ast_type_traits :: DynTypedNode :: get()无法推断模板参数'T'

时间:2016-11-30 19:58:24

标签: c++ c++11 templates clang

我有这段代码:

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);
}

我做错了什么?

1 个答案:

答案 0 :(得分:3)

此处的模板参数T

template <typename T>
const T *get() const { ... }

非推断的上下文。它不能从函数调用的参数中推断出来。您试图在不提供T类型的情况下调用此函数,因此会出错。

你需要写:

const ImplicitCastExpr* ParentICE = ParentNode.get<ImplicitCastExpr>();
                                              //  ^^^^^^^^^^^^^^^^^^