我们说我有一个程序,其中包含以下声明:
std::vector<std::vector<std::vector<std::string> *> > s;
现在我想对此进行标记,将其分成几部分:
在浏览源代码时,这个例子会给我一个VarDecl。如果我理解正确,这个VarDecl包含整个声明。现在我认为下一步是在VarDecl上调用getType()。但那又怎样?我期待一种可以返回的方法,例如迭代器左右。
在你的下方,我会看到我拥有的东西。这适用于例如&#34; int i&#34;或&#34; const char * const i = NULL;&#34;甚至对于&#34; const std :: string l =&#34; 12&#34;;&#34;但是&#34; std :: vector *&gt; &GT;秒;&#34;结果是&#34; int&#34;?(!?)。
void dissectType(ASTContext *const Context, const QualType x)
{
if (x.isNull())
return;
QualType type = x.getNonReferenceType();
for(;!type.isNull();) {
if (type.hasQualifiers()) {
Qualifiers q = type.getQualifiers();
if (q.hasConst())
printf("const ");
if (q.hasVolatile())
printf("volatile ");
if (q.hasRestrict())
printf("restrict ");
}
const Type *t = type.getTypePtr();
if (!t) {
printf("null?\n");
break;
}
else if (t -> isPointerType())
printf("* ");
else if (t -> isFundamentalType()) {
std::string curType = type.getUnqualifiedType().getAsString();
printf("%s\n", curType.c_str());
break; // should be last entry in this chain
}
type = type->getPointeeType();
}
}