ホームページ > バックエンド開発 > C++ > コールバックは C でどのように機能し、そのさまざまな用途は何ですか?

コールバックは C でどのように機能し、そのさまざまな用途は何ですか?

Mary-Kate Olsen
リリース: 2024-12-14 06:20:11
オリジナル
348 人が閲覧しました

How Do Callbacks Work in C  , and What Are Their Various Uses?

C でのコールバックとそのさまざまな使用

C では、コールバックはクラスまたは関数によって受け入れられる呼び出し可能 (後述) です。提供されたコールバックに基づいて現在のロジックをカスタマイズするために使用されます。

使用理由コールバック:

  • 呼び出される関数のロジックに依存しない汎用コードを記述し、さまざまなコールバックでの再利用を可能にします。
  • 呼び出し元に特定のイベントを通知し、静的およびコンパイルを有効にします。 -時間の柔軟性。

C の Callable とは何ですか?

  • 関数ポインター (メンバー関数へのポインターを含む)
  • std::function オブジェクト
  • ラムダ式
  • バインド式
  • 関数オブジェクト (オーバーロードされた関数呼び出し演算子を持つクラス)演算子())

コールバックの作成と呼び出し:

関数ポインタ:

  • 型表記: return_type (*)(parameter_type_1、parameter_type_2、parameter_type_3)
  • コールバック呼び出し表記: function_pointer(argument)
  • コールバック使用表記: function(argument_list, function_pointer)

メンバー関数へのポインター:

  • 型表記: return_type (class_type::*)(parameter_type_1,パラメータタイプ_2、 parameter_type_3)
  • コールバック呼び出しの表記: (class_instance.*member_function_pointer)(argument)
  • コールバックの使用表記: function(argument_list, class_instance, member_function_pointer)

std::function オブジェクト:

  • 型表記: std::function
  • コールバック呼び出しの表記: function_object()
  • コールバックの使用表記: function(argument_list, function_object)

使用例std::function:

一般化コード:

template<class R, class T>
void stdf_transform_every_int_templ(int *v, unsigned const n, std::function<R(T)> fp) {
  for (unsigned i = 0; i < n; ++i) {
    v[i] = fp(v[i]);
  }
}
ログイン後にコピー

テンプレート化されたコールバック:

template<class F>
void transform_every_int_templ(int *v, unsigned const n, F f) {
  for (unsigned i = 0; i < n; ++i) {
    v[i] = f(v[i]);
  }
}
ログイン後にコピー

タイプ名実装:

template <class T>
std::string type_name() {
  typedef typename std::remove_reference<T>::type TR;
  std::unique_ptr<char, void(*)(void*)> own
    (abi::__cxa_demangle(typeid(TR).name(), nullptr,
    nullptr, nullptr), std::free);
  std::string r = own != nullptr?own.get():typeid(TR).name();
  if (std::is_const<TR>::value)
    r += " const";
  if (std::is_volatile<TR>::value)
    r += " volatile";
  if (std::is_lvalue_reference<T>::value)
    r += " &amp;&";
  else if (std::is_rvalue_reference<T>::value)
    r += " &amp;&amp;";
  return r;
}
ログイン後にコピー

以上がコールバックは C でどのように機能し、そのさまざまな用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート