のSTD C ++ 11 ::バインド知覚

std ::バインドを使用すると、クエリデータの前にデザインモードで良いオブザーバーパターンを達成できることを見出しました。

しかし、呼び出された関数のバインドは、マルチレベルポインターの継承を使用して継承を実装することがより困難に結合しました。

次のようにサンプル・コードは次のとおりです。

コンパイラ環境:VS2017

1つの#include " pch.h " 
2の#include <iostreamの>
 3の#include <ベクトル>
 4の#include <機能>
 5  クラスベース
 6  {
 7  公共8      の仮想 ボイド printMsg(){のstd :: COUT << " 基本クラス << はstd ::てendl; }
 9  }。
10  
11  クラスの派生:公共ベース
 12  {
 13  公共14      仮想 ボイド printMsg(){のstd :: coutの<<" 派生クラス" << はstd ::てendl; }
 15  }。
16の 
17  クラスTestClassを
 18  {
 19  公共20      ボイド PrintMsg(ベース** ppbase){(* ppbase) - > printMsg(); }
 21  }。
22  
23  のint main()の
 24  {
 25      のstd ::ベクトル<はstd ::関数< ボイド(ベース**)>> VEC1。
26      TestClassを* PTEST = 新しいTestClassを()。
27      ベース* PBASE = 新しいベース()。
28      ベース* pder =新しい新しい派生();
 29      ベース** =&ppbase PBASE; //はサブクラス増やす
30      vec1.push_back(STD ::バインド(&TestClassを:: PrintMsg、PTEST、ppbase))を、
 31である      * = ppbase PDER; // 割り当て
32      VEC1 [ 0 ](NULL);
 33である 
34である     戻り 0 ;
 35 }

あなたがライン29と31を削除した場合、基本クラスを表示し、プラスその後、派生クラスを表示します。呼び出し時に、アドレスのポインタがすでに変更されたためです。

おすすめ

転載: www.cnblogs.com/Kaifangqu/p/11403059.html