Андрей Вшивков, raylib весьма часто используется для работы с графикой.
А по теме вопроса: поищите у дискорде. Желательно на английском, там очень много групп, например, в тематике геймдева и поэтому найти единомышленников не очень и сложно.
farmer_311, любой проверенный и современный способ на ваш вкус. Кому-то нравится решать задачи и читать книги, а кому-то подавай интерактивный курс. Я бы посмотрел в сторону готовой подборки по типу road map C++ от salmer'a https://www.google.com/url?sa=t&source=web&rct=j&o...
Нет университет остального способа выучить что-либо. Попробуйте несколько способов и их сочетание и посмотрите что вам больше всего нравится.
Учись решать задачи, а не языки.
На С можно написать очень многое, если не все, вот только это не всегда быстро и эффективно.
Поставьте конкретную задачу и посмотрите на доступные инструменты
SynapticWhisper, пишем качественный бенчмарк, в котором мокаем сервер и вуаля наши синтетические цифры готовы к тому чтобы ими хвастаться)
Но да, в целом, я с вами согласен)
SynapticWhisper, странно, если парсер проводить большую часть времени в ожидании. Про GIL я в курсе. Опять же никто не мешает подумать в сторону cpython или вообще переписать часть кода на другом языке/написать либу. Как я говорил выше все упитается в то какая стоит задача.
Какая у вас стоит задача? И для кого она?
Достаточная ли это скорость для решения этой задачи?
Какие цели у парсера и как его можно оптимизировать, а главное зачем?
Есть ли задача парсить в реальном времени?
Какие вычислительные ресурсы вам доступны?
Ускорить вычисления всегда возможно, например, банально распараллелив задачу (многопоточность, многопроцессорность).
Вам нужен какой-то интерфейс для взаимодействия между объектами этих двух классов.
Например, это может быть третий класс-посредник, который возмет на себя эту функцию связывания Form1 и Form2 https://refactoring.guru/ru/design-patterns/mediator
Form1.foo() -> передаст какую-то информацию объект класса Mediator, который в свою очередь передаст информацию другому объекту, например, вызовет метод Form2.bar()
Это может быть как чистый класс-интерфейс со статическими методами, так и полноценный объект класса Mediator, тут уж на ваш вкус и задачу
Если есть место в системе (а тут много особо и не нужно лишь около 80 байт, то можно просто хранить маппер для asci символов по типу
то есть для символов '0', '1', '2', ... 'F' будут какие-то осмысленные значения, а для остальных -1
static constexpr char map['G'] = {-1,-1,-1,...0,1,2,3,4,5,6,...}
Szewczyk, вы всегда либо теряете во времени работы, либо в памяти.
С юнионами вы не добьётесь эффективности по памяти, размер будет определяться наибольшим типом, хранящимся в Юнион. Также в плюсах давно рекомендуют std::variadic вместо union (который, впрочем, не имеет преимуществ по памяти). И в связи со всем этим встаёт вопрос а зачем это все, если выгоды по памяти нет?
Можете попробовать реализовать ваш массив как массив char, а интерпретировать элементы исходя из дополнительной переменной, которая будет указывать сколько байт занимает каждый элемент. Тогда в случае, если N < 255 (если тип беззнаковый) кажддый элмент будет занимать 1 байт, и дальше по степеням двойки.
А по теме вопроса: поищите у дискорде. Желательно на английском, там очень много групп, например, в тематике геймдева и поэтому найти единомышленников не очень и сложно.