クラスに型を追加するためのこのC ++テクニックとは何ですか?

StackOverflow https://stackoverflow.com/questions/1643197

  •  10-07-2019
  •  | 
  •  

質問

C ++コードをいくつか見つけました( http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx )、これまで見たことのない手法を使用して、既存のクラスに型を追加します。

class Testpm {
public:
   void m_func1() { cout << "m_func1\n"; }
   int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
   Testpm ATestpm;
   Testpm *pTestpm = new Testpm;

   // Access the member function
   (ATestpm.*pmfn)();
   (pTestpm->*pmfn)();   // Parentheses required since * binds

   // Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
}

誰かがこの派生型を定義するためのこの手法が何と呼ばれているのか教えてもらえますか? C ++を使用して13年経っても、これに出くわしたことはありません。無知を終わらせたいと思います。

役に立ちましたか?

解決

コメントは正しくありません:pmfnとpmdは「派生型」ではありません。まったく(それらは偶数型ではありません!)。それらは、メンバーへのポインターです。

他のヒント

「型を追加する」とは思わないクラスに。クラスのメンバー関数とメンバーデータへのポインターのタイプを定義し、それらを使用してメンバー関数とデータメンバーにアクセスしているようです。非メンバー関数に型を宣言する方法と似ていますが、クラスのメンバーであるため、構文が異なります。

このサイトからこちら

  

構文については、2つあります   さまざまなタイプの関数ポインター:   一方で、へのポインタがあります   通常のC関数または静的C ++   メンバー関数。一方   非静的C ++へのポインターがあります   メンバー関数。基本的な違い   非静的へのすべてのポインタが   メンバー関数には非表示が必要です   引数:へのthisポインター   クラスのインスタンス。常に保つ   心:これらの2種類の機能   ポインターはそれぞれと互換性がありません   その他。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top