Как стать автором
Поиск
Написать публикацию
Обновить
128.68

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга

Приветствую.

Я пишу облегчённую версию SDL3, с поддержкой старых систем. Проект решил назвать SDL3Lite. Проект пишу на C++ 98, но наружу торчит совместимый С API. Я хочу реализовать базовый функционал, поэтому вполне реально довести проект до конца. Главная идея проекта это сохранить совместимость с оригинальным C API SDL3. В идеале это конечно на уровне бинарной совместимости. Код единожды написанный должен собираться без изменений для всех поддерживаемых систем.

Сейчас работает рендер на OpenGL 1.2, добавляю версию software для старых систем без поддержки аппаратного ускорения. Также планирую добавить и поддержку vulkan. В репе есть скриншоты с выводом графики.

На данный момент поддерживается windows 95 и выше, linux начиная с Debian 3.

Запуск примера под windows 95 в 16 цветов.
Запуск примера под windows 95 в 16 цветов.

В будущих версиях планирую добавить поддержу windows 3.1 и ms-dos.

Рад буду советам, критике и предложениям.

Теги:
Всего голосов 10: ↑10 и ↓0+13
Комментарии0

YetiVM - встраиваемая виртуальная машина для RISC-V(VM-as-Library)

Для скачивания доступна YetiVM - встраиваемый эмулятор RISC-V.
На данный момент поддерживаются rv32i и rv32m.

Есть интеграция сriscv-non-isa/riscv-arch-test

Сам проект написан на C++20 и распространяется под лицензией MIT

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

Работаю в большом проекте состоящем из более чем сотни динамически подгружаемых библиотек. OracleLinux, QtCreator, Qt, C++. Испытывал большие неудобства при загрузке приложения в режиме отладки с большим количеством точек останова (на 10 штуках старт с 30 секунд увеличивался до 2 минут). Казалось бы очевидное, но закономерность замедления обнаружилась не сразу.

При очередном подгруженном модуле происходит попытка установить точки останова в загруженный код. Чем больше кода загружено, тем дольше идет попытка. Как только все точки останова нашли свое место в загруженном коде, скорость подгрузки очередных модулей снова становится быстрой. Активность или пассивность точек останова не влияет.

Для своего проекта отлаживаемые модули перемещаю в начало загрузки (мое приложение делает это конфигурацией), скорость запуска в отладке теперь примерно одинаковая вне зависимости от разумного количества установленных точек останова.

Возможно, я озвучил очевидность. Но мне, работая в данном окружении и в большой команде достаточно давно, это озарение снизошло не сразу. Я и не сильно боролся с этим до недавних пор, сильное замедление произошло не так давно при переходе с Qt4 на Qt5 (у нас вынужденное legacy).

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

Быстрое трудоустройство в YADRO для разработчиков на С++

У нас стартовал SPRINT OFFER в команду разработки телеком-оборудования. Для «плюсовиков» это возможность получить предложение о работе всего за несколько дней. Если хотите пропустить долгие этапы собеседований, отправляйте заявку до 9 марта. 

Как все происходит

  1. Подаете заявку — мы оперативно рассматриваем анкеты.

  2. Проходите HR-скрининг и техническое интервью — без недель ожидания между этапами.

  3. Получаете оффер — если все этапы успешно пройдены, предложение будет у вас в течение 3 дней.

Где предстоит работать 

Дивизион телекома создает решения для мобильных сетей. Инженеры разрабатывают базовые станции GSM/LTE, полный стек телекоммуникационных протоколов, а также системы управления и мониторинга. Большую часть кода разработчики пишут на C++. В зависимости от задачи они используют как современные возможности C++20, так и низкоуровневые оптимизации для повышения производительности.

Кого мы ищем

→ Software Engineer (Telecom Platform)

Требуемый уровень: middle, senior, tech lead.

Чем предстоит заниматься:

  • Разработкой платформы для базовых станций LTE/GSM (middleware, high availability, node management, delivery).

  • Проектированием архитектуры, работа с C++/Linux.

  • Интеграцией с аппаратной и программной частью системы.

  • Оптимизацией кода и решение проблем производительности.

  • Разработкой API, unit-тестирование, документация.

→ Software Engineer C/C++ (LTE/GSM)

Требуемый уровень: middle, senior, tech lead.

Чем предстоит заниматься:

  • Разработкой программного обеспечения для базовых станций LTE.

  • Реализацией стека протоколов 3GPP.

  • Интеграцией с другими системами, оптимизация кода.

  • Решением задач производительности и стабильности системы.

Подробнее о вакансиях и команде читайте на странице SPRINT OFFER. Успейте подать заявку до 9 марта!

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии0

Проблемы в работе плагина PVS-Studio для Visual Studio

Несколько пользователей сообщили нам, что в работе плагина PVS-Studio для Visual Studio версии 17.12 и выше происходят проблемы, не позволяющие запустить плагин. В этой заметке мы опишем проблему и предложим способы её решения.

У некоторых пользователей статического анализатора PVS-Studio при использовании плагина для интегрированной среды разработки Microsoft Visual Studio 2022 происходило завершение работы плагина, связанное с внутренней ошибкой. А на экране появлялся страшный список вызовов:

Exception message:

One or more errors occurred.

Exception type:

System.AggregateException

Stack:    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)

   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)

   at System.Threading.Tasks.Task.Wait()

   at ProgramVerificationSystems.PVSStudio.PVSStudio.InitializeErrorListWindow(Boolean isFromPackageLoadedEvent) in D:\\JenkinsProjects\\workspace\\proj_PVS_Setup_Docker\\WorkDir\\PVS-Studio\\PVS-Studio\\VsPkg.cs:line 2414

Inner Exception:

Exception message:

Exception from HRESULT: 0x80042007

Exception type:

System.Runtime.InteropServices.COMException



Stack: at Microsoft.VisualStudio.Shell.Interop.IVsShell5.LoadPackageWithContext(Guid& packageGuid, Int32 reason, Guid& context)
....

Возникновение этой ошибки обусловлено тем, что в версии Visual Studio 2022 17.12 был изменён API этой среды разработки для взаимодействия с плагинами. Поэтому в версии PVS-Studio 7.33 мы внесли необходимые изменения в плагин для Visual Studio, и на этой версии с указанной средой разработки анализатор работает корректно.

Следовательно, для решения этой проблемы есть следующие варианты:

  • обновить анализатор PVS-Studio до версии 7.33 или выше;

  • откатить версию среды разработки Visual Studio 2022 на предыдущую.

Если после выполнения указанных выше рекомендаций ситуация не решилась, или же вы столкнулись с другой проблемой при использовании нашего анализатора, не стесняйтесь сообщить нам о ней с помощью специальной формы на сайте. Мы приложим все возможные усилия, чтобы решить вашу проблему!

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Valerii Filatov. Issues: PVS-Studio plugin for Visual Studio.

Теги:
Всего голосов 1: ↑1 и ↓0+2
Комментарии0

«Плюсовое» чтиво: ежемесячная рассылка о разработке на С++

Инженеры YADRO пишут не только статьи, но и письма о «плюсах». Подписчики рассылки раз в месяц получают короткую заметку о том, что важно или интересно разработчикам на С++. Какие письма уже выходили:

— Подборка лучших выступлений с Zero Cost Conf с комментариями Константина Владимирова.
— Презентация новой книги Кирилла Колодяжного о машинном обучении на С++.
— Совет, как избежать проблемы с лямбда-корутинами от ведущего инженера Елены Степановой.

Обычно контент из рассылки не найти на других платформах, поэтому оставайтесь на связи, чтобы не пропустить уникальные материалы.

Подписаться на рассылку →

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии2

Один из пользователей сервиса Highload.fun Joad Nacer прогнал все задачи через GPT O1 и получил интересный результат:

Картинка из ТГ Highload.fun
Картинка из ТГ Highload.fun

По 2024 году результат расположился на 20 месте с 3,574 очками, как я понимаю код был на C++. В целом нормально, но я, непрофессиональный кодер на C#, разместился на 23 месте, так что я бы оценил кодерство ИИ на уровне студента 1-го курса непрофильной специальности.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии3

В Фреймворк DBGridChart добавлено OLAP-приложение "Экспресс_обработка_таблицы.exe ", позволяющее при разработке программ на C++, Java, Visual Basic, F# и на других языках программирования (имеющих средства выполнения из программы готовых приложений из командной строки с параметрами) автоматическое формирование табличных и ленточных форм, форм с диаграммами и графиками с готовым унифицированным многофункциональным интерфейсом пользователя для корректировки баз данных, OLAP-анализу и прогнозированию данных в табличной и в графической формах.

Таким образом, программист при разработке приложения, даже на языке, отличным от C#, может использовать все средства и возможности Фреймворка DFGridChart путем обращения к приложению "Экспресс_обработка_таблицы.exe " с указанием через параметры значения свойствам, например: текст строки подключения к базе данных, текст команды Select, текст строки подстановки. Порядок формирование таких таблиц определяется интерфейсом (меню, кнопки), разрабатываемого программистом для приложения.

Гиперссылка для скачивания Фреймворка "DBGridChart", OLAP-приложения "Экспресс_обработка.exe" и "Экспресс_обработка_таблицы.exe " с исходными текстами, DLL-библиотеками, документацией и с демонстрационными примерами: https://disk.yandex.ru/d/sI1VhBiSPzDp-A

Пример обращения к приложению "Экспресс_обработка_таблицы.exe " при разработке программы на C++

#include <string>

...

// Символ # должен быть указан перед наименованием свойства!// Внутри строковых констант перед символами \ и " нужно указывать символ \
std::string
program = "C:\\Экспресс_обработка_таблицы\\bin\\Debug\\Экспресс_обработка_таблицы .exe", // Местоположение приложения
p1 = "#ConnString=Provider = Microsoft.Jet.OLEDB.4.0;Data Source="C:\\Демонстрационный пример Экспресс обработка таблицы для C++\\Выпуск изделий.mdb", // Строка подключения к базе данных
p2 = "#DBMS = Access", // Тип СУБД, если не указан (p2 не указано), то определяется по строке подключения
p3 = "#Select = SELECT Подразделения.[Код подразделения]@#,Подразделения.[Наименование подразделения]*, Подразделения.[Численность на 2022], Подразделения.[Численность на 2023], Подразделения.[Численность], Подразделения.[Дата формирования], Подразделения.[Код типа подразделения]*, [Типы подразделений].[Наименование типа подразделения], Подразделения.[Действующее] FROM [Типы подразделений] RIGHT JOIN Подразделения~ ON [Типы подразделений].[Код типа подразделения] = Подразделения.[Код типа подразделения] ORDER BY Подразделения.[Наименование подразделения]", // Запрос с возможностью корректировки таблицы Подразделения. Специальные символы при режиме корректировки после имен полей или псевдонимов: ключевое (@), обязательное (*), не корректируемое (#) поле и после имени корректируемой таблицы указывается символ ~, если таблиц несколько во фразе From.
p4 = "#Podstavit_v_kolonki = ктп #-; SELECT [Наименование типа подразделения], [Код типа подразделения] FROM [Типы подразделений] ORDER BY [Наименование типа подразделения]", //Подстановка кода типа подразделения в колонку с именем ктп по наименованию путем выбора мышкой из списка (сформированного указанной командой Select) наименований типов подразделений. Режимы подстановки: только из списка (-), список открывается в текущей ячейке (#).
p5 = "#Flag_Create_SQL_Select = True", // Разрешить (True)/не разрешить (False) использовать конструктор команд SQL (по умолчанию - True и p5 можно не указывать)
p6 = "#Table_№ = 2367", // Уникальный номер (обычно, случайное число) таблицы или запроса для сохранения макета настройки индивидуально для таблицы
parameters = p1 + p2 + p3 + p4 + p5 + p6, // параметры приложения
command = program + " " + parameters; // командная строка
system(command.c_str()); // выполнение приложения, которое формирует табличную форму с многофункциональным унифицированным интерфейсом Фреймворка DBGridChart

Теги:
Всего голосов 16: ↑1 и ↓15-14
Комментарии0

Приветствую, Земляне! Почти 3 месяца миновало с первого релиза NotOnlyClock, моего персонального проекта на платформе Arduino.

NotOnlyClock
NotOnlyClock + Помидор

За это время вышло 2 обновления, подписчики моего Телеграм-канала всегда узнают обо всем самыми первыми. Обновления получила не только прошивка устройства, но и "железная" часть получила опциональную модификацию: теперь, на устройство можно установить кнопки с подсветкой.

Ниже приведен список ключевых изменений 2-х последних обновлений:

  • теперь, можно использовать до 8-ми секундомеров и таймеров одновременно (на 7 больше, чем было доступно ранее);

  • добавлен режим для подсчета количества нажатий с 9-ю независимыми счетчиками;

  • добавлен Помодоро трекер для отслеживания времени работы и отдыха по методу Помидора.

Подробные описания: обновление 1, обновление 2.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Пишем приложение для поиска объектов на С++ (а не на Python)

Результат работы приложения по поиску объектов на С++
Результат работы приложения по поиску объектов на С++

Приложения по поиску объектов, написанные на С++, работают ничуть не хуже привычных вариантов на Python. На это есть несколько причин:

  • Программы на С++ получаются более быстрыми и компактными. Инженерам доступно больше вычислительных ресурсов, так как современные компиляторы оптимизируют программу в соответствии с архитектурой целевого процессора.

  • C++ не использует дополнительный сборщик мусора для управления памятью — это существенно влияет на производительность программы. 

  • Размер программы также можно уменьшить, поскольку C++ не использует дополнительную виртуальную машину и компилируется непосредственно в машинный код.

Это хороший выбор для мобильных устройств с ограниченным объемом ресурсов, например, телефонов или маломощных плат, которые используются в робототехнике или видеоаналитике.

Если хотите написать такое приложение, изучите материалы инженера YADRO и ML-энтузиаста Кирилла Колодяжного. Он подробно описал, как реализовать программу на С++ с применением библиотек компьютерного зрения.

Подготовительная часть →

Практическая часть →

Теги:
Всего голосов 6: ↑6 и ↓0+8
Комментарии0

GPU для сверточных нейросетей и быстрой обработки данных

В среду, 11 декабря, подключайтесь к бесплатному онлайн-митапу от сообщества C++ Russia. В программе всего два доклада — трансляция начнется в 17:00.

«Свертка на GPU и увеличение ее размерности»

Рассказывает: Кирилл Колодяжный (@Mik42), ведущий инженер по разработке ПО, YADRO

Вы познакомитесь с понятием свертки и ее доступными реализациями для NVIDIA GPU. Вместе с докладчиком рассмотрите различные алгоритмы расчета свертки: наивный алгоритм, FFT, GEMM (im2col/col2im), Winograd. Основное внимание уделим тому, как увеличить размерность свертки, так так сейчас наиболее распространена 3D-свертка.

Кирилл покажет простой подход к увеличению размерности с использованием PyTorch и расскажет, почему он не подошел. Также он поделится деталями реализации подхода на основе vol2col, расскажет, как тот позволяет масштабировать размерности и использовать быстрые реализации базовой операции GEMM с использованием cuBLAS и CUTLASS.

«GPU для ускорения фреймворка обработки слабоструктурированных данных Otterbrix: технологии, массивы и производительность»

  Александр Боргардт, техлид DuckStax 

Доклад посвящен ускорению обработки колоночных данных с использованием видеокарт. Александр рассмотрит применение GPU для оптимизации работы с массивами данных, характерных для фреймворка. Особое внимание уделим сравнительному анализу технологий CUDA и OpenCL с точки зрения их эффективности и применимости в данной области. Сравним производительность подходов в нескольких бенчмарках.

Особенно полезен доклад исследователям и специалистам в области высокопроизводительных вычислений, заинтересованных в использовании GPU для обработки больших объемов данных.

Кому подойдет митап: Организаторы ожидают, что участники понимают и могут читать код на С++. Если вы никогда не программировали GPU, на открытии будет введение в технологию.

Митап пройдет онлайн на платформах YouTube и VK Видео:

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Это не IDE, а neIDE - простое графическое приложение для быстрого запуска небольших программ на C++. Может пригодиться когда появилась идея или что-то прочитал и хочется быстро протестировать, но нет времени на запуск тяжеловесных IDE типа Visual Studio или открывать в браузере 1001-ю вкладку чтобы протестировать в godbolt.org. Нужно лишь назначить комбинацию клавиш на запуск или создать ярлык в доке. Можно конечно по-быстрому запустить vim, набрать код и ручками напечатать "g++ main.cpp && ./a.out", но мне надоело так постоянно делать, поэтому написал программу, которая все это делает сама. Ближайший аналог - geany - мощный блокнот, где можно прописать свои команды, но она мне показалась слишком перегруженной функционалом.

В общем, представляю neIDE, где есть только кнопка "Run", поле для ввода кода и поле вывода результатов/ошибок. При запуске загружает код-заготовку. Работает только с тем кодом, что в окне ввода. Нет возможности подгружать внешние файлы. Написана на wxWidgets. Компилирует код под с++17, но можно легко скорректировать под нужный стандарт. Заточена на Linux, но при некотором упорстве можно скомпилировать на Windows. Минимум строк кода, можно форкнуть и быстро доработать под свои хотелки.

neIDE
neIDE

Ссылки на репозиторий github и gitflic.

Теги:
Всего голосов 9: ↑8 и ↓1+9
Комментарии14

В этом вебинаре мы обсудили грамматические конструкции в С++ и как они работают. Мы поговорили о разных видах парсеров и о том, почему С++ сложно парсить. Мы также поделились некоторыми хитростями, позволяющими избежать чрезмерного замедления.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Ближайшие события

Приветствую, Земляне! Намедни закончил новый проект на платформе Arduino.

NotOnlyClock
NotOnlyClock

Проект получил название NotOnlyClock (Ну не только же часы), и из названия можно предположить, что устройство представляет из себя часы, отчасти это так, и у вас моментально возникнет вопрос: "Очередные часы? Таких устройств уже существует сотни, если не тысячи." Конечно, с этим сложно поспорить, но там помимо часов есть много других функций (секундомер, таймер, будильник, термометр, гигрометр и барометр), кроме этого, я обеспечил проект полным набором документации (схемы, разводки печатных плат, модель корпуса, исходный код прошивки и т.д.), а также обеспечил все подробными инструкциями по сборке. И в конце концов, если что-то хочется - надо это сделать. Надеюсь это принесет пользу не только мне.

Кликайте сюда, чтобы самостоятельно во всем убедиться.

Чтобы узнавать обо всех обновлениях в числе первых, подписывайтесь на Telegram-канал

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии3

Захват переменных в С++ без ошибок? Как?

Попробуем рассказать об этом завтра на нашем бесплатном вебинаре «Ля какие! Лямбды в С++».

Встретимся и поговорим про:

→ Захваты переменных, параметры, возвращаемые значения и типы замыканий.
→ Лямбды в C++20 и C++23.
→ Применение в реальных задачах: передача функций в алгоритмы STL, написание компактных колбэков

⚡️ Спикер: Юрий Вашинко, Tech Lead/Lead Developer с опытом более 15 лет в разработке

📌 15 октября, завтра, в 14:00 мск
📌 Занять место на вебинаре — через бота.

Приходите 🙃

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Prime World от Nival отдали в open source

Официальный сервер был выключен в 2021 году.

Лицензия запрещает коммерческое использование - но велкам улучшать игру, комьюнити уже занимается этим. Как насчет сборки для Линукс?

Похоже это первая open source MOBA.

Репозиторий: https://github.com/Nival-Pub/Prime-World, скоро должны форкнуть.

Комьюнити:

https://vk.com/primeworldclassic

Там, если хотите, найдете чат программистов.

Если вашу любимую игру не продают - возможно, пора написать создателям/издателю чтобы её тоже открыли - хоть запуск на современных системах можно чинить.

https://www.facebook.com/share/p/hdwgSx9KhuwpJNLr/

Теги:
Всего голосов 6: ↑6 и ↓0+10
Комментарии0

Привет! На связи команда Neiry Tech, мы занимаемся разработкой BCI-устройств и алгоритмов для использования с ними. Расскажем про ПО Capsule, считывающее и записывающее мозговую активность, и другие физиологические сигналы пользователя. И Capsule API — он помогает нам строить на основе классифицированных метрик и индексов итоговые приложения).

По сути Capsule — библиотека для десктопных и мобильных платформ с собственным графическим интерфейсом. Для быстродействия написали её на C++. Для Capsule API выбрали C.

Для вывода в API на разных платформах иногда пишем нативный код на Android или iOS, ну и обертку на C, чтобы API мог использовать широкий спектр разработчиков — за родным ноутом и в лаборатории.

Физиологические данные — сложные сигналы с высоким уровнем шума. Для их интерпретации нужно хорошо владеть методами цифровой обработки сигналов, погрузиться в предметную область, и как минимум понимать, чем фильтр Чебышева отличается от фильтра Баттерворта.

Головной боли добавляют особенности различных платформ — с плавающими задержками протокола BLE, или с реализацией вроде бы базовых вещей. Мы как-то обнаружили, что библиотека, занимающаяся быстрым преобразованием Фурье, нагружала новенькие Apple Silicon на 30%.

Сейчас Capsule и API позволяют работать с данными ЭЭГ и ФПГ на высоком для не лабораторного устройства уровне. Смотрим, радуемся и гордимся.

Хотите поработать с этими данными и нашим API? Присоединяйтесь к хакатону BCI Hack Moscow, регистрация до 15 сентября.

Теги:
Всего голосов 4: ↑4 и ↓0+8
Комментарии0

Привет, Хабр! Держите задачу от наставника курса «Разработчик на С++» Саввы Лебедева. Предлагайте варианты решения в комментариях.

Дан непустой массив целочисленных элементов, где каждый элемент повторяется дважды, кроме одного. Найдите этот одинокий элемент.

Идеально выполнить за линейную сложность по времени и константную сложность по памяти. Заодно попробуйте решить эту задачу менее оптимальным способом по памяти, например с использованием множества или словаря.

Пример 1:

Ввод: nums = [2,2,1]
Вывод: 1

Пример 2:

Ввод: nums = [4,1,2,1,2]
Вывод: 4

Пример 3:

Ввод: nums = [1]
Вывод: 1 

Ограничения:

  •  1 <= nums.size() <= 3 * 10^4

  •  -3 * 10^4 <= nums[i] <= 3 * 10^4

  • Каждый элемент в массиве повторяется дважды, кроме одного: он будет единожды.

int FindSingleNumber(vector<int>& nums) {
	...
}

Теги:
Всего голосов 7: ↑6 и ↓1+10
Комментарии17

Почему бы не сделать runtime языка С++ проще и легче? почему бы не сделать его перенос в том числе проще? Когда я задался этим вопросом, я решил, что во чтобы то ни стало, я напишу свой RT, для тех, кто пишет под слабые машины, или тех, кто пишет под bare metal среду. результат вы можете посмотреть на гитхабе: вотъ

Когда я работал, я старался максимально всё упростить, при этом сохранив юзабельность. не знаю как для других, но лично мне было важно сохранить исключения, для меня это удобно. но в С++ они жутко дорогие из-за RTTI (RunTime Type Information), и на bare metal реализуется с большим напрягом. выход прост - использовать статусы вместо типов. но чтобы оставить всем знакомый и удобный синтаксис исключений и позволить функциям возвращать что-то вместо статуса, где это везде лепят, я переделал всё на тупо макросах :>

так же я понял, что сложность моей работы и сложность переносимости этой вещицы усложнится, если прям всё с нуля пилить, поэтому просто воспользовался libc, выпилив libc++. Пришлось сделать обёртки над new и delete, но это не так уж и сложно, просто вызывать malloc/free.

Так же я невероятно сильно намучился в попытках сделать всё используя стандартный синтаксис С++. Потратил несколько часов в попытках разобраться как оторвать исключения от использования rtti, возился в флагах, писать cxa, gxx и unwind с нуля, даже лез в ассемблерный код в попытках вырезать надоеду, но по итогу сдался и просто слепил всё из макросов.

Всем добра <3

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Вклад авторов