Соответствующий шаблонный аргумент ИмяC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Соответствующий шаблонный аргумент Имя

Сообщение Anonymous »

Я пытаюсь сопоставить vardecl () , который является специализацией шаблона с типами определенного имени. Например: < /p>

Код: Выделить всё

template 
class C { };

C var;
Я хотел бы сопоставить var , когда аргумент шаблона - char . Сопоставщик, который я использую до сих пор: < /p>

Код: Выделить всё

m varDecl(hasType(classTemplateSpecializationDecl(
hasAnyTemplateArgument(templateArgument(
# TODO: match type with the name 'char'
).bind("template_param"))
).bind("var")))
Вывод из Clang-Query :

Код: Выделить всё

Binding for "template_param":
TemplateArgument type 'char'
`-BuiltinType 0x13203c6b0 'char'

Binding for "var":
ClassTemplateSpecializationDecl 0x1538906f0  col:7 class C definition implicit_instantiation
|-DefinitionData pass_in_registers empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init
| |-DefaultConstructor exists trivial constexpr defaulted_is_constexpr
| |-CopyConstructor simple trivial has_const_param implicit_has_const_param
| |-MoveConstructor exists simple trivial
| |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param
| |-MoveAssignment exists simple trivial needs_implicit
| `-Destructor simple irrelevant trivial needs_implicit
|-TemplateArgument type 'A'
| `-RecordType 0x15386ca80 'A'
|   `-CXXRecord 0x15386c9f0 'A'
|-CXXRecordDecl 0x1538909c8  col:7 implicit class C
|-CXXConstructorDecl 0x153890a88  col:7 implicit used constexpr C 'void () noexcept' inline default trivial
| `-CompoundStmt 0x153891030 
|-CXXConstructorDecl 0x153890c40  col:7 implicit constexpr C 'void (const C &)' inline default trivial noexcept-unevaluated 0x153890c40
| `-ParmVarDecl 0x153890d70  col:7 'const C &'
`-CXXConstructorDecl 0x153890e50  col:7 implicit constexpr C 'void (C &&)' inline default trivial noexcept-unevaluated 0x153890e50
`-ParmVarDecl 0x153890f80  col:7 'C &&'
< /code>
Вещи, которые я пробовал: < /p>
        refersToType(builtinType(hasName("char")))
< /code>
не работает: < /p>
3:22: Error building matcher builtinType.
3:34: Incorrect type for arg 1. (Expected = Matcher) != (Actual = Matcher)
< /code>
refersToDeclaration(decl())
также, похоже, ничего не соответствует.

Подробнее здесь: https://stackoverflow.com/questions/795 ... -type-name
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»