Учитывая класс с закрытым членом другого пространства имен
namespace Test { namespace Cfg {
class ExampleApi {
public:
ExampleApi() = default;
int someVar;
};
}}
class Example {
public:
Example() = default;
private:
Test::Cfg::ExampleApi _cfgApi;
};
Я пытаюсь найти соответствие во вложенном пространстве имен Cfg для cxxConstructorExpr, поскольку моей конечной целью является чтение некоторых имен переменных из ExampleApiкласс
Я могу сопоставить _cfgApi
, выполнив что-то вроде:
cxxConstructExpr(hasType(asString("Test::Cfg::ExampleApi")))
Но этого недостаточно, поскольку база кода автоматически генерирует классы под Test::Cfg::*Api
, а у меня нетнашел использование предикатов подстановочных знаков.
Я попытался сделать что-то с:
nestedNameSpecificierLoc(hasPrefix(loc(specifiesNamespace(hasName("Test")))))
, которое соответствует пространству имен, но не вложенному пространству имен. Я думаю, что после пост-обработки может быть слишком много шума для постобработки.
Я играл с сопоставителем hasParent
, но пока мне не повезло.
Итак, мой вопрос: как мне сопоставить вложенное пространство имен для инициализации класса.