ここにブレースを見つける方法があります。私のテストでは、名前付きの名前空間と匿名の名前空間の両方で動作します。 next_locがNOPQ 1、COL 18行目に対応することになる
namespace NOPQ {
void f(int){}
}
namespace
ABCD
{
void g(float){}
}
namespace {
void h(int){}
}
ような宣言で
// Assuming ns_decl is pointer to the NamespaceDecl
// sm is reference to the SourceManager
... in addition to the usual headers:
#include "clang/Basic/TokenKinds.h" // for clang::tok
#include "clang/Lex/Lexer.h" // for Lexer
...
clang::LangOptions lopt;
bool skipNewLines = false;
SourceLocation locToUse = ns_decl->isAnonymousNamespace() ?
ns_decl->getLocStart() : ns_decl->getLocation();
SourceLocation next_loc(
clang::Lexer::findLocationAfterToken(
locToUse,clang::tok::l_brace, sm,lopt,skipNewLines));
。 7行目、ABCDの列7、匿名のnsの11行目、12行目。
素晴らしく、ありがとう。私はちょうどそれがgetLocStart()と同じであると想定しているので、おそらくgetLocation()を取り巻くドキュメントがもう少しあるはずです。また、フォローアップの質問として、私は(そしてこの質問を読んでいる他の人たちも)いつか将来起こるでしょう:これを一般的にどうすればいいですか?言い換えれば、場所の後で特定のトークンの最初の位置を探したい場合、Lexerを使ってそのようにするにはどうすればよいですか? – srujzs
他の人にとっては、それは上記と全く同じです。 – srujzs