2011-07-12 11 views
11

clang APIを使用してC++ソースファイルにパラメータのタイプを出力する必要があります。clang APIを使用してパラメータ(ParmVarDecl)のタイプを印刷

パラメータ表現がclang(ParmVarDecl* param)の場合、param->getNameAsString()を使用してパラメータの名前を印刷できます。 param->getTypeAsString()の方法が必要ですが、そのような方法はありません。では、この作業を行う別の方法がありますか?

答えて

22

はLLVMのIRCで私の質問への答えを得た:

の方法std::string clang::QualType::getAsString(SplitQualType split)

がありますので、これは私のための作業を行います。

これが接続されている方法
ParmVarDecl* param = *someParameter; 
cout << QualType::getAsString(param->getType().split()) << endl; 
+0

あなたはたぶん私を一週間節約しました –

+0

あなたは確かに私を一晩中救った。 –

-2

typeidを使用して任意のタイプの名前を取得できます。それはコンパイラごとに異なりますが、かなりの名前ではないかもしれません。

#include <iostream> 
#include <typeinfo> 

struct MyStruct { }; 

int main() 
{ 
    std::cout << typeid(MyStruct).name() << std::endl; 
} 

あなたはクラスの多くのためにこれを行うために必要がある場合は、その後、機能を必要とするすべてのクラスはそれから継承することができ、基本クラスの呼び出し部分を作ることができます。

#include <iostream> 
#include <typeinfo> 

class NamedClass 
{ 
    public: 
    virtual ~NamedClass() { } 

    std::string getNameAsString() 
    { 
     return typeid(*this).name(); 
    } 
}; 

class MyStruct : public NamedClass 
{ 
}; 

int main() 
{ 
    MyStruct ms; 
    std::cout << ms.getNameAsString() << std::endl; 
} 
+5

を質問は尋ねた? q。 clang APIに関するもので、彼はclang ASTでこれをやりたかった –

+0

Antonが書いたように、私はclang APIでこれを行いたいので、ソースファイルを処理するときに、関数とそのパラメータタイプを出力できます。しかし、私はあなたの答えを試してみる、おそらく私はそれを利用することができます。 –

関連する問題