ホームページ >バックエンド開発 >C++ >C メンバー関数ポインター: `->*` と `.` をいつ使用するか?

C メンバー関数ポインター: `->*` と `.` をいつ使用するか?

DDD
DDDオリジナル
2024-11-17 14:00:04272ブラウズ

C   Member Function Pointers: When to Use `->*` 対 `.`?
*` 対 `.`? " />

C のメンバー関数ポインター : >* と .

多くのプログラマーは、メンバーへのポインター演算子 > と . を見つけます。 C の

は混乱を招きます。この記事では、これらの使用法と、従来の > を使用する場合について説明します。 ..

>* および .

> および .

は、メンバー関数へのアクセスを可能にするメンバーへのポインター演算子であることを理解するこれらの演算子は、メンバー関数を動的にバインドする必要がある場合に使用されます。 object.
  • >*:
  • この演算子は、ポインターとオブジェクトが同じ型の場合に使用されます。
  • .*:
  • この演算子は、ポインターが派生型であり、オブジェクトが基本型である場合に使用されます。 type.

例:

次のクラスについて考えます:
struct X
{
   void f() {}
   void g() {}
};

メンバー関数 f へのポインターを作成するには、次のようにします。 typedef を使用できます:
typedef void (X::*pointer)();

これで、f をポインターに代入できます。 somePointer:
pointer somePointer = &X::f;

ポインターを使用してメンバー関数を呼び出すには、オブジェクトが必要です:
X x;
(x.*somePointer)(); // Calls x.f()

x がオブジェクトへのポインターの場合、>* を使用する必要があります。代わりに:
X* px = new X;
(px ->* somePointer)(); // Calls px->f()

の使用法シナリオ:

通常、メンバー関数を引数として関数に渡すか、コンテナーに格納する必要があるシナリオでは、> と .

を使用する必要があります。これらの演算子は、特定のオブジェクト インスタンスから関数呼び出しを分離する方法を提供します。

結論:

メンバーへのポインター演算子 > と 。 C の

は、動的な関数バインディングを可能にする強力なツールです。それらの使用法と、従来の > 上でそれらをいつ使用するかを理解することで、と . を使用すると、コードの柔軟性と再利用性を高めることができます。

以上がC メンバー関数ポインター: `->*` と `.` をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。