我正在为我的大学做一个小组高级项目,我在尝试让我的代码工作时遇到了一个主要障碍。
我们的 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)找到一个更好的编译器,它可能会花费$$$。
第二种选择是最难的,但就我如何编写这段代码而言,它会带来最大的回报。但是,我想如果我弄错了调试它可能会很痛苦。我正在考虑在堆栈上创建对象,将它们的位复制到分配的空间中,然后将对象中的位清零,这样它就不会调用它的析构函数。为此,我将使用 unsigned char 指针和 sizeof 运算符直接访问这些位以获取字节数。
这听起来很糟糕,我不知道它是否可以可靠地工作,但我正在考虑。我知道 vtables 可能是个问题,但我不打算拥有任何 vtables,因为它只是一个 8 位微控制器。