2016-11-30 29 views
0

を取得し、私は、このコードスニペットを持っている:打ち鳴らす:: ast_type_traits :: DynTypedNodeは::()カント推論テンプレート引数「T」

基本的に
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()、私は1つとしてノードを取得し、さらにいくつかをしたい チェック。私は、コードをコンパイルしようとすると 、DynTypedNode::get()のために、私はこの取得:

template <typename T> 
const T *get() const { 
    return BaseConverter<T>::get(NodeKind, Storage.buffer); 
} 

は私が間違って何をやっている:

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 { 

をここにヘッダからの宣言ですか?

答えて

3

ここテンプレートパラメータTは:

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

非推測コンテキストです。関数呼び出しの引数から推論することはできません。 Tの型を指定せずにこの関数を呼び出すと、エラーが発生します。

あなたは記述する必要があります。

const ImplicitCastExpr* ParentICE = ParentNode.get<ImplicitCastExpr>(); 
               // ^^^^^^^^^^^^^^^^^^ 
関連する問題