static void Main(string[] args)
        {
            var myClass = new ClassDeclaration("CMyClass");

            // Add a private field
            myClass.Fields.Add(new FieldDeclaration("m_someInt", Primitive.Int, AccessLevel.Private));

            // Define our custom type
            var myType = new TypeReference("CSomeOtherClass").MakePointer();

            // And store a private pointer with a basic comment
            myClass.Fields.Add(new FieldDeclaration("m_pSomePointer", myType, AccessLevel.Private,
                new Comment("Test comment")));

            // Add getters
            myClass.Functions.Add(new FunctionDeclaration("GetInteger", Primitive.Int));
            myClass.Functions.Add(new FunctionDeclaration("GetOtherClass", myType));

            // And setters
            var intArg = new VariableDeclaration("value", Primitive.Int);
            var classPtrArg = new VariableDeclaration("value", myType);

            myClass.Functions.Add(new FunctionDeclaration("SetInteger", Primitive.Void,
                AccessLevel.Public, false, intArg));
            myClass.Functions.Add(new FunctionDeclaration("SetOtherClass", Primitive.Void,
                AccessLevel.Public, false, classPtrArg));

            // Add a virtual function with a multiline comment
            var comment = new MultilineComment("This is a function",
                "that should be overridden",
                "just because it can be");

            var function = new FunctionDeclaration("OverrideMe", Primitive.Char.MakePointer().MakeConst(),
                AccessLevel.Public, true);

            function.Comment = comment;
            myClass.Functions.Add(function);

            var classSource = myClass.CreateSource();

            Console.Write(myClass.CreateSource());
            Console.ReadLine();
        }