省略の美学

最近 boost を使いながらゲーム製作してて、ふと思うことがある。
なるほどboostは便利だ。けど、boostのコンテンツって、なんか名前が長くないか? と。
よく使われるshared_ptrも、確かに boost 中じゃ短い部類なんだけど、hoge* p;boost::shared_ptr p;じゃ書く手間がぜんぜん違うわけで。using boost::shared_ptr;とかすれば少しはマシになるわけですが、それでも素のポインタに比べれば冗長。かといってtypedef boost::shared_ptr SPHOGE;とかWin32API風にtypedefするのはアレだし、どうも良い方法がないものか・・・
と思ったので、そのための部品を作ってみた。

template<typename Derived>
class shared_object
{
 public:
	typedef boost::shared_ptr<Derived> ptr;
	typedef boost::weak_ptr<Derived> wptr;
	typedef boost::shared_ptr<const Derived> const_ptr;
	typedef boost::weak_ptr<const Derived> const_wptr;
};

ソースはこれだけ。使用方法は、クラスを作るときに

class hoge : public shared_object<hoge>
{
	// 適当に中身をここに記述
};

こうすれば、hogeのshared_ptrが欲しい時にはhoge::ptr p;でおっけー。shared_ptr p;よりもだいぶ短くなる。