この質問に似ています:パラメーターのタイプ (ParmVarDecl) を clang APIで出力します。パラメーター/フィールドのタイプを文字列として取得したいのですが、重要なことに、タイプを完全に修飾する必要があります。
namespace n {
class A {};
class B {
void f(std::vector<A> a) {}
std::vector<A> m_a;
};
} // n
が欲しいのですがstd::vector<n::A>
、 ではありませんstd::vector<A>
。
私はこの解決策を試しました: http://clang-developers.42468.n3.nabble.com/Getting-the-fully-scoped-type-of-a-function-parameter-td4028221.html (getAsCXXRecordDecl() and getQualifiedNameAsString ())、どちらの場合もdecl.getType()->getAsCXXRecordDecl()
返さnullptr
れます。
更新: また、このソリューションは、clang で完全修飾された Expr を印刷する方法? 私が使用しているclang 7にはPrintCanonicalTypesがないため、役に立ちません。
私はclang 8にアップグレードして再試行する必要があると思います.