コード例 #1
0
        private void VisitTypeDeclaration(TypeDeclarationSyntax node)
        {
            tcb = new TypeCodeBuilder();
            tcb.Top.AppendIndent();

            if (node.TypeParameterList != null &&
                node.TypeParameterList.Parameters.Count > 0)
            {
                tcb.Top.Append("template <");
                var ps = node.TypeParameterList.Parameters;
                for (int i = 0; i < ps.Count; ++i)
                {
                    var p = ps[i];
                    tcb.Top.Append("typename ").Append(p.Identifier.ToString());
                    if (i + 1 != ps.Count)
                    {
                        tcb.Top.Append(", ");
                    }
                }
                tcb.Top.Append("> ");
            }

            tcb.Top.Append("class " + node.Identifier);

            // here comes the tricky part: base class declarations
            if (node.BaseList != null)
            {
                var types = node.BaseList.Types;
                for (int i = 0; i < types.Count; ++i)
                {
                    var t = types[i];
                    if (i == 0)
                    {
                        tcb.Top.Append(" : ");
                    }
                    tcb.Top.Append("public ").Append(t.Type.ToString());
                    if (i + 1 != types.Count)
                    {
                        tcb.Top.Append(", ");
                    }
                }
            }

            tcb.Top.AppendLine(" { ");

            if (node is ClassDeclarationSyntax)
            {
                var cds = (ClassDeclarationSyntax)node;
                base.VisitClassDeclaration(cds);

                if (cds.HasInitializableMembers(model) && !cds.HasDefaultConstructor())
                {
                    tcb.Public.AppendLineWithIndent(cds.Identifier + "();");
                }
            }
            else if (node is InterfaceDeclarationSyntax)
            {
                var ids = (InterfaceDeclarationSyntax)node;
                base.VisitInterfaceDeclaration(ids);
            }
            tcb.Bottom.AppendLineWithIndent("};");

            // flush tcb to cb
            cb.Append(tcb.ToString());
        }
コード例 #2
0
        private void VisitTypeDeclaration(TypeDeclarationSyntax node)
        {
            tcb = new TypeCodeBuilder();
              tcb.Top.AppendIndent();

              if (node.TypeParameterList != null &&
            node.TypeParameterList.Parameters.Count > 0)
              {
            tcb.Top.Append("template <");
            var ps = node.TypeParameterList.Parameters;
            for (int i = 0; i < ps.Count; ++i)
            {
              var p = ps[i];
              tcb.Top.Append("typename ").Append(p.Identifier.ToString());
              if (i + 1 != ps.Count)
            tcb.Top.Append(", ");
            }
            tcb.Top.Append("> ");
              }

              tcb.Top.Append("class " + node.Identifier);

              // here comes the tricky part: base class declarations
              if (node.BaseList != null)
              {
            var types = node.BaseList.Types;
            for (int i = 0; i < types.Count; ++i)
            {
              var t = types[i];
              if (i == 0) tcb.Top.Append(" : ");
              tcb.Top.Append("public ").Append(t.Type.ToString());
              if (i + 1 != types.Count)
            tcb.Top.Append(", ");
            }
              }

              tcb.Top.AppendLine(" { ");

              if (node is ClassDeclarationSyntax)
              {
            var cds = (ClassDeclarationSyntax)node;
            base.VisitClassDeclaration(cds);

            if (cds.HasInitializableMembers(model) && !cds.HasDefaultConstructor())
            {
              tcb.Public.AppendLineWithIndent(cds.Identifier + "();");
            }
              }
              else if (node is InterfaceDeclarationSyntax)
              {
            var ids = (InterfaceDeclarationSyntax)node;
            base.VisitInterfaceDeclaration(ids);
              }
              tcb.Bottom.AppendLineWithIndent("};");

              // flush tcb to cb
              cb.Append(tcb.ToString());
        }