1

この質問に似ています:パラメーターのタイプ (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にアップグレードして再試行する必要があると思います.

4

1 に答える 1

0

PrintCanonicalTypesflag は、完全に修飾されたメソッド/関数パラメーターを ( と組み合わせてdecl.getOriginalType().getCanonicalType().getAsString(...)) 出力するのに役立ちます。

フィールドの場合、明示的な型の代わりにフィールド名を使用しましdecltype()たが、これは私にとってはうまくいきました(コンパイルするために生成されたコードではなく、型自体が必要なかったからです)。

于 2019-11-08T20:46:38.020 に答える