White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

boost::weak_ptrのキャスト

boost::weak_ptr(以下boost::は略)を使っていて、ダウンキャスト(派生クラスへのキャスト)を行う方法がわかりませんでした。どうも一発で行くような方法もないようなので、下のように一旦shared_ptrに変えてからshared_dynamic_castを使ってキャストして、またweak_ptrに戻すよう、書いてみたんですが。

(weak_ptr a,weak_ptr b)
shared_ptr tmp1= make_shared(a);
shared_ptr tmp2= shared_dynamic_cast>(tmp1);
weak_ptr tmp3(tmp2);
m_pParent = tmp3;

ちなみにCHogefooはCHogeの派生クラス。

エラー:

c:\boost_1_31_0\boost\shared_ptr.hpp(212) : error C2440: '=' : 'boost::shared_ptr *const ' から 'CHogefoo *' に変換できません。
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
d:\source\bar.cpp(8) : コンパイルされたクラスのテンプレートのインスタンス化 'boost::shared_ptr &boost::shared_ptr::operator =>(const boost::shared_ptr> &)' の参照を確認してください
with
[
T=CHogefoo
]