我有以下代码:
template <typename T>
class Foo
{
template <typename U>
void bar() const;
};
[[template <typename T>]]
template <typename U>
void Foo<T>::bar() const
{
}
转储方法foo
的AST树为方法定义提供了以下内容(为清楚起见,删除了无关的详细信息:]
`-FunctionTemplateDecl <line:10:1, line:14:1> col:11:14 bar
|-TemplateTypeParmDecl <line:10:11, col:20> col:20 typename depth 1 index 0 U
`-CXXMethodDecl <line:9:1, line:14:1> line:11:14 bar 'void () const'
`-CompoundStmt <line:12:1, line:14:1>
我不知道如何找到template <typename T>
部分(在[[...]]
块中的部分)的位置。我在clang AST API中找不到任何相关内容。任何帮助将不胜感激。
最后,我找到了自己问题的解决方案,因此发布了答案。希望它可能对其他人有所帮助。
可以使用getNumTemplateParameterLists()
类的getTemplateParameterList()
和DeclaratorDecl
方法获取外部模板参数的位置信息。有关详细信息,请参见documentation。