我正在抽象多个微控制器上的中断处理。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。