Visualization Tool Kit(VTK)など

Signal/SlotだとかObserverパターンなどと呼ばれる構造を提供する.

Observerパターン

名のとおり観察するクラスと観察されるクラスに分けられる.
誤解しやすいのは観察するクラスがチェックするのではなく,観察されるクラスが変更を通知する.
例えばDoc-Viewアーキテクチャでは各Viewがデータを観察するわけであるが,常にViewが変更を確認するのは高コストである.
そこでDocumentが変更された時にDocumentが全てのViewに通知すればよい.

簡単な例とすると


class Document
{
public:
  void SetData(std::string arg )
  {
    mData = arg;
    for( auto it = mpViews.begin(); it != mpViews.end(); ++it)
    {
      it->lock()->Update();
    }
  }
  void AddView(std::shared_ptr<View> view)
  {
    mpViews.push_back( std::weak_ptr<View>( view ) );
  }
private:
  std::vector< std::weak_ptr<View> > mpViews;
  std::string mData;
};

class View
{
public:
  void Update()
  {
    UpdateInternal();
  }
protected:
  virtual UpdateInternal() = 0;
};

Boost.Signals2

リファレンス
基本的には,メンバ関数ポインタを渡しておくことで通知する構造となっている.

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

#include<memory> #include<string> #include<sstream> #include<algorithm> #include<functional> #include<numeric>

Media Foundation

【メニュー編集】
Wiki記法ガイド

メンバーのみ編集できます