Joh*_*ehm 1 c++ stl compilation compile-time
我正在抽象多个微控制器上的中断处理。ARM Cortex M-3 / 4确实支持STL,但ATMega328p(已大量使用)不支持C ++ STL。我仍然想利用std::function基本C样式函数指针的附加功能来注册特定中断的回调。我还没有测试过,但是被告知与简单的函数指针相比,C ++ lambda可以做很多事情,尤其是在捕获变量和引用时。
我想更改定义的标头类(如有必要)和实现的类(如有必要,可能没有必要,因为实现只会丢失),以便在编译时删除成员函数定义,具体取决于控制器支持或不支持STL。我想知道C ++是否提供这样的测试,或者是否可以通过包含STL标头和某种方式的测试来做到这一点,包括是否失败?
...
#include <functional>
class InterruptVectorTable
{
bool setCallback(ValueType InterruptNumber, void (*Callback)(void));
bool setCallback(ValueType InterruptNumber, std::functional<void(void)> Callback);
}
Run Code Online (Sandbox Code Playgroud)
如果不允许同时使用两个定义,那么我想最好使用std::function。
小智 5
新的C ++ 17标准具有您正在寻找的__has_include功能。但是,这有点像鸡和鸡蛋的问题。如果您的平台不支持STL,则c ++ 17可能已过时。
相反,您可能想依靠自己的构建系统。例如,cmake可以检测到编译器支持哪种C ++标准,甚至可以实现标准的哪一部分。
在您的情况下,如果标准lib在该平台上可用,则让构建定义临时预处理器常量HAS_STD_CPP可能更简单,然后使用c预处理器包含或不包含STL位,如https中所示://en.wikipedia.org/wiki/C_preprocessor。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |