Re[3]: Язык С и инкапсуляция
От: _NN_ www.nemerleweb.com
Дата: 14.05.15 10:03
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Здравствуйте, _NN_, Вы писали:


_NN>>Функции работы с файлом как раз являются таким примером.


T>Мне нравится обсуждение возможных проблем концепции opaque pointer, которая лежит в основе FILE*


T>Автор справедливо замечает: решение с opaque data type обрекает вас на выделение объектов в куче. Но это иногда может быть не совсем эффективно. А иногда -- совсем не эффективно. Как решение автор предлагает shadow data types:

Можно еще через alloca выкрутиться или VLA C99.
Например

size_t sizeof_FILE(); 

FILE* f = (FILE*)alloca(sizeof_FILE()); // Выделяем на стеке

// Или так C99
char c[sizeof_FILE()];
FILE* f = (FILE*)&c[0];

fcreate(f); // Вызываем конструктор


Можно обернуть в макрос для удобства.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.