【发布时间】:2020-01-10 09:16:14
【问题描述】:
我正在从事嵌入式项目,使用 Zephyr RTOS 和 ARM 嵌入式微控制器,如 STM32 Nucleo 系列 (Cortex M4/0)。
最近,由于最近版本的 Zephyr 对 C++ 支持的显着改进,我正在考虑从 C 开发转向现代 C++。
默认情况下,Zephyr 包含 C 标准库,但不包含 Cpp 的 STD。
Zephyr 实际上添加了对 Cpp 标准库的可选支持,这似乎工作得很好。然而,它需要大量的闪存使用(我的微控制器闪存中接近 65%,没有我的代码!)。
所以我正在尝试寻找在没有实际标准库(包括内存/实用程序头文件)的情况下使用现代 C++ 的替代方法。
我考虑过将Boost.smart_ptr 用于智能指针,但我想知道我应该如何使用移动语义(std::move)。
我应该使用Boost.Move 模块吗?即使我使用的是 C++1x 而不是 C++0x?
我应该使用direct cast from T& to T&&自己实现移动语义吗?
【问题讨论】:
-
您可以在一行中自己实现
std::move...好吧,您也需要remove_reference,并且可能想要进行一些格式化。但是,如果您只需要标准库中的std::move,那么就不会有任何问题。 -
Boost(以及几乎所有 CPP 代码)依赖于 STD,即包括 std 标头。
-
我宁愿避免 STD、异常和 RTTI
-
@IgorR。如果我没记错的话,如果不包含 STD 标头,Boost 在其内部实现中会有回退。我已经成功地在没有 STD 的情况下使用 Boost.DI,也会尝试 smart_ptr & move 但我注意到它们在源代码中也有后备......
-
@P__J__ 当然,我会避免任何反嵌入式机制,例如异常和 RTTI。但智能指针似乎对我的需求很有价值,所以我宁愿不放弃。
标签: c++11 move-semantics boost-smart-ptr zephyr-rtos boost-move