Skip to content

Callback Library

概要

このライブラリは、コールバック関数を簡単に管理するためのC++ライブラリ 任意のハンドルに対してコールバック関数を登録し、優先度に基づいて実行可能


関数概要

attach

コールバック関数を登録

cpp
void attach(intptr_t handle, std::any &&fn, uint8_t priority);
  • handle : コールバック関数を関連付けるハンドル
  • fn : 登録するコールバック関数
  • priority : コールバック関数の優先度

callback

登録されたコールバック関数を実行

cpp
template <class T, class... Args>
void callback(intptr_t handle, Args... args);
  • handle : 実行するコールバック関数が関連付けられているハンドル
  • args : コールバック関数に渡す引数

使用方法

  1. コールバック関数を登録
    cpp
    callback::attach((intptr_t)&huart2, []() { UARTread(); }, 0);
    • callback::attach : attach関数を呼び出す
    • (intptr_t)&huart2 : huart2のアドレスを整数型ポインタにキャストして渡す。これはコールバック関数を関連付けるハンドル
    • []() { UARTread(); } : ラムダ式で、UARTread関数をコールバックとして登録
    • 0 : コールバック関数の優先度を指定

NOTE

ラムダ式とは

ラムダ式は、無名関数(名前のない関数)を定義するための構文。C++11以降で導入され、簡潔に関数オブジェクトを作成可能。以下はラムダ式の基本的な構文

cpp
[キャプチャ](引数) -> 戻り値の型 { 関数の本体 }
  • [] : キャプチャリスト。外部の変数をラムダ式内で使用するために指定
  • () : 引数リスト。関数に渡す引数を指定
  • -> 型 : 戻り値の型。省略可能
  • {} : 関数の本体
  1. 登録されたコールバック関数を実行
    cpp
    callback::callback<void()>((intptr_t)&huart2);

注意事項

  • 登録するコールバック関数はstd::functionである必要がある
  • コールバック関数の実行中に例外が発生しないように注意