CodeZineです、はい。
shared_ptrによるObserverパターンの実装
お馴染みObserverパターンです。要はCallbackすよ。
Observerの歴史は古く、織田信長が長引く戦に疲弊し、矢の飛び交う中
「わしはちょっと寝る。なにかあったら起こせ」
と臣下に伝え馬上で熟睡したとの記録が残っており、
馬上で眠る信長公の姿を模した木彫りの馬: 御武座馬(おぶざば)
は郷土玩具として有名ですね。(うっそぴょーん)
Observerパターンに起こる問題のひとつが、
「起こそうとしたお館様が冷たくなってたらどーすんの?」
.NET/Javaでは強参照、つまり「死なさへんでぇ」と。
C++では参照カウントを使って死なさんこともできますし、
弱参照を使えば死んでもだいぢょぶな実装もできるよ。
ってなことを書いてます。コードたっぷりです。
ぢつは、このお話もう一本のルートがありましてですね。
.NETではdelegate/eventってゆーナイスなからくりが
Observerパターンの利用を自由なものにしてくれました。
delegateのおかげで特定のクラス/インタフェースから継承/実装
しなければ信長になれないってゆー縛りから解放されます。
さて、C++0Xでは新たにlambdaが導入されました。
このlambdaを使ってdelegate/eventの真似ごとができるはず。
どんな手管でdelegate/eventっポいものを作るか...知りたくね?
わんくま横浜勉強会にいらっしゃいませ(ホホホ)。
マンガ本とか魔導書とか怪しげなカードとかもありますよー
なんとなくOpenCLなるものを の続き。
そゆわけで、入門書を読みつつ第三章「OpenCLプログラム作成手順」に従って
サンプル・コードを打ち込んでたわけです。
版社のサポート・ページから掲載コードぜんぶ拾ってこれるんだけども、
最初はちまちま手打ちして開発スタイルを腕に覚えさすですよ。
サンプル・コードはなんとも素直なCなので難しくはないんだけども...長い。
二つの float 配列を足す: out[i] = in1[i] + in2[i] をやらすだけのことに400行。
毎回これじゃかなわんなー、なんぞ賢いやり方ないものかとATIやOpenCLの
本家クロノスにある資料を眺めてたですよ。
...みつけましたぜダンナ、クロノスのOpenCLドキュメント集の中に
OpenCL 1.1 C++ Bindings Specification なんちゅーのがあるやないのん。
んむ、どうやらCで提供されたOpenCL-APIにクラスの薄皮を被せたwrapperとミタ。
そんじゃってんで ATI Stream SDK の include-dir. 覗いたらアナタ、ちゃんと入ってるぢゃあァりませんか♪
こいつを使って書き換えてみたらまぁ、なんということでしょう。400行が80行にっ!
おちゃらか超並列コンピューティングなら OpenCL C++binding でキマリだぜぃ!
# ここらへん、.NETはどんなアプローチなのかしら。
# DirectCompute とやらの .NET-interface を提供すんのかしら。