Я пишу типобезопасные универсальные структуры данных на языке C ( danielchasehooper.com )
Основная идея здесь, по-видимому, заключается в использовании типа указателя функции для обеспечения безопасности типов, а не в использовании типа «дескриптора» данных (который часто встречается в реализациях, вдохновленных strechy_buffers Шона Барретта).
> Одна из раздражающих особенностей языка C заключается в том, что он не считает эти две переменные имеющими одинаковый тип.
C23 решает и эту проблему: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3037.pdf
Поддерживается последними версиями GCC и Clang, но не MSVC.
Мне пришлось написать целый диалект C на основе этого трюка. С прагматической точки зрения я не увидел большой разницы с шаблонами C++. Разве что нотация более тяжеловесная.
https://github.com/gritzko/librdx/tree/master/abc
например, общая куча C: https://github.com/gritzko/librdx/blob/master/abc/HEAPx.h
Интересно! Я работаю над игрушечным/образовательным генератором тегированных вариантов в стиле ML и связанных функций на языке C (для компилятора), и когда я немного продвинусь, я посмотрю, совместимы ли они.
Это крутой трюк. Я уже использую его в своей экспериментальной библиотеке 😉 https://github.com/uecker/noplate/blob/main/src/list.h
Source: news.ycombinator.com