class CSound {
/**
smart_ptr<ISound> といちいち書くのは面倒極まりないので..
※
ISurfaceに対するCPlaneと同じ。
ISoundに対してはCSound。
*/
public:
LRESULT Load(const string& strFileName);
/// ↑このファイル(wav,mp3,mid,ogg..)を読み込む
/// ポインタのふりをするための仕掛け
ISound& operator*() const {return *get(); }
ISound* operator->() const {return get(); }
/// ISurfaceへの暗黙の変換
operator ISound* () const { return get(); }
/**
Null Check
loadに失敗すれば、このクラスの抱えているポインタsmart_ptr<ISound>は
Nullになるので、それを検出する。
*/
bool isNull() const { return p_.isNull(); }
ISound* get() const { return p_.get(); }
static void SetFactory(smart_ptr<ISoundFactory>&pFactory)
{ pFactory_ = pFactory; }
static smart_ptr<ISoundFactory> GetFactory()
{ return pFactory_; }
protected:
smart_ptr<ISound> p_; // p_; ←って泣いてるの?
static ThreadLocal<smart_ptr<ISoundFactory> > pFactory_;
};
|