anonymous@RULINUX.NET~# Last login: 2024-11-22 05:06:02
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

мужик предлагает превратить C в C++

http://ramlamyammambam.livejournal.com/9318.html

Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с tagged-типами языка Ада.

1) Описание новых структур как дополнение старых:

  1.   struct foo : bar {
  2.   ...
  3.   };
  4.  }
  5.  Поля новой структуры дописываются в хвост к полям старой структуры. Разрешается неявное преобразование указателя на расширенную структуру к указателю на базовую.
  6.  
  7.  2) Описание структур с набором интерфейсных функций:
  8.  code{
  9.   struct stream {
  10.   ...
  11.   interface:
  12.   void putch (char c);
  13.   int getch (void);
  14.   int peekch ();
  15.   void flush ();
  16.   int eof ();
  17.   };
  18.  }
  19.  В структуре создается скрытое первое поле, указывающее на таблицу указателей на функции:
  20.  code{
  21.   struct stream {
  22.   struct {
  23.   void (*putch) ();
  24.   int (*getch) ();
  25.   int (*peekch) ();
  26.   void (*flush) ();
  27.   int (*eof) ();
  28.   } *interface;
  29.   ...
  30.   };
  31.  }
  32.  3) При определении интерфейсной функции указывается имя соответствующей структуры. Добавляется скрытый аргумент this:
  33.  code{
  34.   void putch (char c) : interface struct stream
  35.   { ... }
  36.  }
  37.  превращается в:
  38.  code{
  39.   void putch (struct stream *this, char c)
  40.   { ... }
  41.  }
  42.  4) Вызов интерфейсной функции:
  43.  code{
  44.   stream->putch ('x');
  45.  }
  46.  транслируется так:
  47.  code{
  48.   stream->interface->putch (stream, 'x');
  49.  
Дело за малым - нужен энтузиаст, готовый хакнуть GCC. :-)

vilfred(*) (2009-08-08 12:53:00)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.8.0.3) Gecko/20060524 ASPLinux/1.5.0.3-0.110am Firefox/1.5.0.3 pango-text

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: мужик предлагает превратить C в C++ от vilfred 2009-08-08 12:53:00
avatar
Скрыть

мужик предлагает превратить C в C++

бред какой. Не нравится С - пущай и юзает С++ или ту же Аду. Для чего превращать одно в другое, причём такое же как уже есть.

bugmaker(*)(2009-08-08 20:15:25)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13
[#] [Добавить метку] [Редактировать] Ответ на: мужик предлагает превратить C в C++ от vilfred 2009-08-08 12:53:00
avatar
Скрыть

мужик предлагает превратить C в C++

Согласен с bugmaker, если переделывать так лучше сразу C++. А если C не переделывать, то можно взять glib или другой кастыль.

anonymous(*)(2009-08-09 11:55:08)

Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!