Я работаю над групповым старшим проектом для своего университета, и я столкнулся с серьезным препятствием, пытаясь заставить мой код работать.
Компилятор, который у нас есть для нашего 8-битного микроконтроллера Atmel, не поддерживает операторы new или delete, а также не поддерживает C++ STL. Я мог бы запрограммировать его на C, но мне нужно реализовать алгоритм A*, чего я никогда раньше не делал. Сначала я попробовал C, но вскоре понял, что никогда раньше не работал на чистом C. Попытка моделировать объекты с помощью структур и функций замедляет меня, так как я привык к гораздо более чистому синтаксису C++.
Тем не менее, точную формулировку недостатков моего компилятора можно найти здесь: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
Чтобы преодолеть их и по-прежнему использовать C++, я рассмотрел следующие возможности. 1) Ничего не выделяйте, просто используйте шаблоны для создания фиксированных массивов в стеке. 2) Выделите и найдите какой-нибудь хак для вызова конструктора для объектов после того, как я выделил для них место. Размещение new не подходит, так как new не является оператором. 3) Просто используйте C и смиритесь с этим, это микроконтроллер, почему мне это нравится? 4) Найдите лучший компилятор, который, вероятно, будет стоить $$$.
Второй вариант самый сложный, но он принесет наибольшую отдачу с точки зрения того, как я могу написать этот код. Тем не менее, я полагаю, что отладка может быть огромной проблемой, если я ошибаюсь. Я думаю о создании объектов в стеке, копировании их битов в выделенное пространство, а затем обнулении битов в объекте, чтобы он не вызывал свой деструктор. Для этого я бы напрямую обращался к битам с помощью указателя без знака char и оператора sizeof, чтобы получить количество байтов.
Звучит ужасно, и я не знаю, сможет ли это работать надежно, но я обдумываю это. Я знаю, что vtables могут быть проблемой, но я не собираюсь иметь vtables, так как это всего лишь 8-битный микроконтроллер.