Создание С\C++ API для библиотек на С++
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Добрый день!
Хочу рассказать о своем open-source проекте, посвященному сабжу.
Для этого пилю beautiful capi — github.com/...etrPPetrov/beautiful-capi
Ключевые особенности:
— Распилка всех классов на С функции, потом сборка этих С функций в класс заново в header only style клиенте.
Как результат клиент может использовать как С, так и С++ API
— Нет QueryInterface, как в COM-подобных системах, но зато есть down_cast<>() — это фактически dynamic_cast, однако обработка на стороне библиотеки, чтобы не было проблем с бинарной несовместимостью RTTI.
Из-за этого библиотека может быть на MSVC 2019, а клиент на Borland C++ compiler или Digital Mars C++ compiler.
— Вся аллокация\деаллокация идет на стороне библиотеки, чтобы не было проблем с разными менеджерами хипов
— Экспортируемые С функции имеют простые, понятные имена. Вместо знаков кракозябров (@!? и прочих), используется только знак подчеркивания (_). Правило такое: сначала идет имя неймспейса (переведенное в snake_case),
затем добавляется имя класса (переведенное в snake_case), и имя метода в этом же стиле. Например, метод Show класса Printer неймспейса Hello будет иметь имя hello_printer_show.
— Решается проблема с исключениями. Библиотка ловит свои исключения, а затем передает информацию о них через специальную структуру (первій аргумент в С функциях). На клиенте исключение повторно вібрасівается. Поддерживается иерархия исключений.
Уже сейчас при помощи инструмента bcapi можно создавать
42 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів