Это определенно не С, но я бы посоветовал взглянуть на Луа.
По своей сути, Lua имеет только несколько основных типов: число, строка, логическое значение, функция и таблица (хотя есть еще пара вопросов, выходящих за рамки этой темы. Таблица по сути является просто хеш-таблицей, которая принимает ключи любого типа и может содержать значения любого типа.
Вы можете реализовать ООП в Lua с помощью metatables . В Lua для таблицы разрешено иметь до одной метатабельной таблицы, к которой обращаются при особых обстоятельствах , например, когда таблица добавляется или умножается на другую таблицу или когда вы пытаетесь получить доступ к ключу, который присутствует в таблице.
Используя метатаблицы, вы можете быстро и легко достичь чего-то совершенно похожего на наследование, объединив несколько метатаблиц. Когда вы пытаетесь получить доступ к отсутствующему ключу в таблице, Lua ищет ключ с именем __index
в метатабельной таблице. Поэтому, если вы попытаетесь получить доступ к ключу с именем foo
в таблице, у которой такого ключа нет, Lua проверит наличие foo
в первой метатаблице. Если его там нет и метатабель имеет собственный метатабл с определенным __index
, он проверит наличие foo
в следующем и т. Д.
Как только вы поймете, как просто сделать это в Lua, перевод на C становится очень достижимым. Конечно, ваш ООП будет полностью во время выполнения, но он действительно будет очень похож на ООП.