如何从clang中的FunctionDecl类获取参数信息作为字符串。我尝试但是被这么多的遗产弄糊涂了。他们编译器也说getReturnType()不是FunctionDecl的成员,但是doxygen文档说不然。请帮忙。 http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html
using namespace std;
using namespace clang;
using namespace clang::driver;
using namespace clang::tooling;
using namespace llvm;
.......
class ExampleVisitor : public RecursiveASTVisitor<ExampleVisitor>
{
......
virtual bool VisitFunctionDecl(FunctionDecl *func)
{
numFunctions++;
string funcName = func->getNameInfo().getName().getAsString();
string retName = func->getReturnType().getAsString();
...
return true;
}
}
错误: -
'class clang :: FunctionDecl'没有名为'getReturnType'的成员
答案 0 :(得分:3)
根据您是否需要合格或非限定名称,您可以将返回类型和参数名称字符串化,如下所示
std::string retType = F->getReturnType().getAsString();
std::string arg0;
if(F->getNumParams() > 0)
arg0 = F->parameters()[0]->getQualifiedNameAsString();
查看提供的getAsString()方法。
编辑:在您发表评论后,我发现您没有最新的Clang源代码。请在重试前检查一下。祝你好运!
答案 1 :(得分:2)
试试这个,
getResultType()
而不是
getReturnType()
llvm 3.4没有成员getReturnType()
但存在名称为getResultType()
的相同功能。
答案 2 :(得分:0)
要动态获取所有参数列表,下面的代码会有所帮助。
string retName = func->getReturnType().getAsString();
for(int i=0; i<func->getNumParams(); i++)
{
std::cout << " " << func->parameters()[i]->getQualifiedNameAsString();
}
...
答案 3 :(得分:0)
这是一个工作功能,可以打印有关FunctionDecl的所有信息。已在Windows / LLVM6.0.0上进行了测试
void printFunctionDecl(FunctionDecl* f)
{
std::cout << "FunctionDecl@:"<<f<<":"
<< f->getReturnType().getAsString()<<" "
<< f->getQualifiedNameAsString()
<<"(";
for (int i = 0; i < f->getNumParams(); i++)
{
if (i > 0) std::cout << ",";
std::cout
<< QualType::getAsString(f->parameters()[i]->getType().split()
, PrintingPolicy{ {} })<<" "
<< f->parameters()[i]->getQualifiedNameAsString();
}
std::cout << ")"
<<" Definition@"<<f->getDefinition()
<<"\n";
}