Пример #1
0
        public virtual bool VisitTemplateSpecializationType(TemplateSpecializationType template,
                                                            TypeQualifiers quals)
        {
            if (!VisitType(template, quals))
            {
                return(false);
            }

            if (VisitOptions.VisitTemplateArguments)
            {
                foreach (var arg in template.Arguments)
                {
                    switch (arg.Kind)
                    {
                    case TemplateArgument.ArgumentKind.Type:
                        var type = arg.Type.Type;
                        if (type != null)
                        {
                            type.Visit(this, arg.Type.Qualifiers);
                        }
                        break;

                    case TemplateArgument.ArgumentKind.Declaration:
                        arg.Declaration.Visit(this);
                        break;
                    }
                }
            }

            if (template.IsDependent && template.Template != null)
            {
                return(template.Template.Visit(this));
            }

            var specialization = template.GetClassTemplateSpecialization();

            return(specialization != null && specialization.Visit(this));
        }
Пример #2
0
 public InjectedClassNameType(InjectedClassNameType type)
     : base(type)
 {
     TemplateSpecialization = (TemplateSpecializationType)type.TemplateSpecialization.Clone();
     Class = type.Class;
 }
Пример #3
0
 public ClassTemplatePartialSpecialization FindPartialSpecialization(
     TemplateSpecializationType type)
 {
     return(FindSpecialization(type) as ClassTemplatePartialSpecialization);
 }
Пример #4
0
 public ClassTemplateSpecialization FindSpecialization(
     TemplateSpecializationType type)
 {
     return(Specializations.FirstOrDefault(
                spec => spec.Arguments.SequenceEqual(type.Arguments)));
 }