1

类似于这个问题:Print the type of a parameter (ParmVarDecl) with 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() 和 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 回答