A Day in the Life

mbed で Callback 関数を扱う

mbed のコアAPI、 Ticker などでも使われている、FunctionPointer を使う。

typedef FunctionPointerArg1<void, void> FunctionPointer;
typedef FunctionPointerArg1<void, int> event_callback_t;

の定義の通り、引数なしなら FunctionPointer を、int を引数に渡したいなら event_callback_t を使う。FunctionPointerArg1 を使って自分で定義するのももちろん良い。ちなみに FunctionPointerArg2 は無い。

FunctionPointer を使うと、いわゆる bind 的なことも

void attach(T *object, R (T::*member)(void)) { // bind
void attach(R (*function)(void)) {

でしてくれるのでちょっと便利。


そもそも C++11 の <std::function> 等々が使えれば良いんじゃ無い、と思うけど、mbed OS では

We are not using C++11 yet so do not write code compliant to this standard.

というポリシーなので、このような事が必要。

関連するかもエントリー

mbed OS5 の Callback
mbed OS2 までは、引数に関数を受け取る場合、FunctionPointerArg1 を使って抽象化していた。mbed OS 5 では Callback を使う。https://developer.mbed.org/users/mbed_official/code/mbed...
mbed OS2 までは、引数に関数を受け取る場合、FunctionPointerArg1 を使って抽象化していた。mbed OS 5 では...
BLE Nano V1.5 を mbed 上で 32K RAM で扱う
BLE Nano は V1.0 では 16KB の RAM が、V1.5 から 32K RAM がのっている。が、mbed 上では現在 1.0 ベースしかなく、折角の 32K RAM が使えない。ので使えるようにする方法メモ。mbed OS 5 の場合rtos の INITIAL...
BLE Nano は V1.0 では 16KB の RAM が、V1.5 から 32K RAM がのっている。が、mbed 上では現在 1....
mbed SDK での C++ コーディングルール
https://github.com/ARMmbed/mbed-os/blob/master/docs/COMMITTERS.mdにコーディングルールが書かれていた。今まで C++ でちゃんとしたコーディングルール上で開発をしたことがなかったので読んでみた。ルールThe mbed...
https://github.com/ARMmbed/mbed-os/blob/master/docs/COMMITTERS.mdにコーディ...