東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

Observerネタを書きました。ついでに横浜勉強会へのお誘い。

CodeZineです、はい。

 

shared_ptrによるObserverパターンの実装

 

 お馴染みObserverパターンです。要はCallbackすよ。

Observerの歴史は古く、織田信長が長引く戦に疲弊し、矢の飛び交う中

「わしはちょっと寝る。なにかあったら起こせ」

と臣下に伝え馬上で熟睡したとの記録が残っており、

馬上で眠る信長公の姿を模した木彫りの馬: 御武座馬(おぶざば)

は郷土玩具として有名ですね。(うっそぴょーん)

 

Observerパターンに起こる問題のひとつが、

「起こそうとしたお館様が冷たくなってたらどーすんの?

 

.NET/Javaでは強参照、つまり「死なさへんでぇ」と。

C++では参照カウントを使って死なさんこともできますし、

弱参照を使えば死んでもだいぢょぶな実装もできるよ。

 

ってなことを書いてます。コードたっぷりです。

 

ぢつは、このお話もう一本のルートがありましてですね。

.NETではdelegate/eventってゆーナイスなからくりが

Observerパターンの利用を自由なものにしてくれました。

delegateのおかげで特定のクラス/インタフェースから継承/実装

しなければ信長になれないってゆー縛りから解放されます。

 

さて、C++0Xでは新たにlambdaが導入されました。

このlambdaを使ってdelegate/eventの真似ごとができるはず。

 

どんな手管でdelegate/eventっポいものを作るか...知りたくね?

わんくま横浜勉強会にいらっしゃいませ(ホホホ)。

マンガ本とか魔導書とか怪しげなカードとかもありますよー

 

投稿日時 : 2010年8月10日 19:36

コメントを追加

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/10 21:21 Chiharu

shared_ptr / weak_ptr は便利ですね。私も多用します。濫用といっても良いくらい。というか new と書いたらそこには shared_ptr が必ずあるくらい。
(知らない間に shared_array ってどこかに行っちゃったんですね。

マルチスレッド時に参照カウンタの上げ下げでロック考慮しなくてもいい点もグッドですね。
(参照カウンタが 0 になるタイミングだけ注意が必要ですが

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/10 21:46 επιστημη

> shared_array

あー。どっか迷子になっちゃってますねぃ。
「shared_ptr<vector<T>> で我慢しとけ」ってことかしら。

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/10 22:13 Chiharu

或いは shared_ptr<T> ptr(array, [](T* array) { delete [] array; }); とか。

# Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/11 0:52 .NET Clips

素敵なエントリーの登録ありがとうございます - .NET Clipsからのトラックバック

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/11 9:08 はつね

織田信長

# 
Twitter Trackbacks for

Observer????????????????????????????????????????????????????????????????????????
[wankuma.com]
on Topsy.com
2010/08/11 14:11 Pingback/TrackBack


Twitter Trackbacks for

Observer????????????????????????????????????????????????????????????????????????
[wankuma.com]
on Topsy.com

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/11 19:15 επιστημη

> 織田信長

かおまっか(ハヅカチー
照れ隠しに脚色してみた。

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/11 22:23 もりお

う、うそぴょん!?
記事の4ページ目の room.imcrement() は Typo でしょうか。
ところで επιστημη さんのコードをみていると後置インクリメントが
少ないように思うのですが C++ におけるインクリメントのお作法のようなものがあるのでしょうか。

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/11 22:35 επιστημη

> Typo でしょうか。

ぁぅ...typoです。修正しときました。

> C++ におけるインクリメントのお作法

お作法的には インクリメント/デクリメントは原則前置です。
ふつー
X& operator++() // 前
X operator++(int) // 後
と定義されています。
なので後置だと値返しとなり、余計なコピーが必要となりますから。

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/11 22:43 もりお

ふむふむ、そんな事情があるのですか。
お教えいただきありがとうございます。

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/12 9:26

今年もわんくま横浜たのしそう!
中旬まで確定できないのですがきっとお茶のみに参ります^^

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/12 12:46 ちゅき

>怪しげなカード

大阪で外れたため、死ぬ気で取りに行きます。
無いとまともに活動できないし、自分で買うのはo...rz
#某賞は無理っぽそうだし^^;

ということで、後ろからObserverになってます^^/
#これを言いたかっただけ^^;(ちゃんと申し込んでますよー♪)

# re: Observerネタを書きました。ついでに横浜勉強会へのお誘い。 2010/08/12 22:38 επιστημη

> 自分で買うのはo...rz

デスヨネー

> 某賞

おかげさんで自腹切って買ってるのはマウスくらいでしょうか♪
BlueTrackってどーなんです? > ALL

# nXgtvjNmbCzSY 2014/08/28 12:23 http://crorkz.com/

v762JN I'll immediately snatch your rss as I can not find your e-mail subscription link or e-newsletter service. Do you've any? Please allow me know so that I could subscribe. Thanks.

# gAoDBynmNNBHGIZv 2014/09/09 19:51 http://www.arrasproperties.com/4009-e-3rd-st-apt-3

I'd should verify with you here. Which isn't something I usually do! I get pleasure from studying a put up that will make folks think. Additionally, thanks for allowing me to comment!

タイトル  
名前  
URL
コメント