SHINTAさんのとこで Haiku Coding Guidelines の中に BAutolock を使うなという記述があることを始めて知りました。でも代わりに使えという Autolock テンプレートがどこにあるのかわからなかったのでググって見ました。せっかく調べたので書いておきます。
結局、Haiku 内で Autolock テンプレートを見つけることはできなかったんですが(どこかにあるのかな?)どうやら Haiku Coding Guidelines は、OpenTracker の Coding Guidelines を元にしているようです。全く同じ表現があります。で、OpenTracker には、AutoLock.h というものがあるのでこれが Autolock テンプレートではないかと思います。ただし、このクラス、もともとは Be Newsletters - Volume 4: 1999 にあるものではないかと思いますが。
んでもって、BAutolock と Autolock テンプレートの違いといえば、
BAutolock は「スコープに合わせて自動的にロック・アンロックする」という目的だけを持つ非常にシンプルなユーティリティとして提供されているものだと思うので、サードパーティのアプリケーションが目的に合わせて BAutolock を使うことは特に問題ないと思います。
Haiku Coding Guidelines はあくまで Haiku を作るときのガイドラインなので、Haiku にパッチを送ったりするのでなければ、他のカッコの位置とかのルールと同じ程度に参考にすればいいんじゃないかと思いました。
結局、Haiku 内で Autolock テンプレートを見つけることはできなかったんですが(どこかにあるのかな?)どうやら Haiku Coding Guidelines は、OpenTracker の Coding Guidelines を元にしているようです。全く同じ表現があります。で、OpenTracker には、AutoLock.h というものがあるのでこれが Autolock テンプレートではないかと思います。ただし、このクラス、もともとは Be Newsletters - Volume 4: 1999 にあるものではないかと思いますが。
んでもって、BAutolock と Autolock テンプレートの違いといえば、
- BAutolock はテンプレートじゃないので引数に BLocker と BLooper をそれぞれとるバージョンが存在する。一方、Autolock テンプレートは Lock()、Unlock()、IsLocked() を実装するクラスなら何にでも適用できる。(具体的には BBitmap にも適用できる)
- BAutolock はコンストラクタでロック、デストラクタでアンロックという使い方しかできないが、Autolock テンプレートはコンストラクタでロックせずに必要になったときにロックしたり、任意のタイミングでアンロックができる。
BAutolock は「スコープに合わせて自動的にロック・アンロックする」という目的だけを持つ非常にシンプルなユーティリティとして提供されているものだと思うので、サードパーティのアプリケーションが目的に合わせて BAutolock を使うことは特に問題ないと思います。
Haiku Coding Guidelines はあくまで Haiku を作るときのガイドラインなので、Haiku にパッチを送ったりするのでなければ、他のカッコの位置とかのルールと同じ程度に参考にすればいいんじゃないかと思いました。