Работя върху групов старши проект за моя университет и се натъкнах на голямо препятствие в опитите си да накарам кода си да работи.
Компилаторът, който имаме за нашия 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-битов микроконтролер.