gpt4 book ai didi

c++ - 使用 clang Libtooling API 打印完全限定类型的参数 (ParmVarDecl) 或字段 (FieldDecl)

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:13 27 4
gpt4 key购买 nike

类似于这个问题: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对我来说。

更新:另外,这个解决方案 How to print fully qualified Expr in clang?没有帮助,因为我正在使用的 clang 7 中没有 PrintCanonicalTypes。

我想我必须升级到 clang 8 并重试。

最佳答案

PrintCanonicalTypes 标志确实有助于打印完全限定的方法/函数参数(结合 decl.getOriginalType().getCanonicalType().getAsString(...) ).

对于字段,我使用字段名称的 decltype() 而不是显式类型,这对我有用(因为我不需要类型本身,而是生成的代码来编译).

关于c++ - 使用 clang Libtooling API 打印完全限定类型的参数 (ParmVarDecl) 或字段 (FieldDecl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com