lang:c-extensions
Table of Contents
Предложения по расширению языка Си
Описанные ниже расширения языка Си позволяют простыми средствами превратить его в объектно-ориентированное средство разработки. При этом достигается совместимость с языком Ада.
1)
Описание новых структур как дополнение старых:
struct foo : extends bar { ... };
Поля новой структуры дописываются в хвост к полям старой структуры.
2)
Описание структур с набором интерфейсных функций:
struct stream { ... interface: void putch (char c); int getch (void); int peekch (); void flush (); int eof (); };
В структуре создается скрытое первое поле, указывающее на таблицу указателей на функции:
struct stream { struct { void (*putch) (); int (*getch) (); int (*peekch) (); void (*flush) (); int (*eof) (); } *interface; ... };
3)
При определении интерфейсной функции указывается имя соответствующей структуры. Добавляется скрытый аргумент this:
void putch (char c) : interface struct stream { ... }
превращается в:
void putch (struct stream *this, char c) { ... }
4)
Вызов интерфейсной функции:
stream->putch ('x');
транслируется так:
stream->interface->putch (stream, 'x');
Copyright (C) 2005 Сергей Вакуленко
lang/c-extensions.txt · Last modified: 2005/10/25 00:39 by 127.0.0.1