クラスがあるとしましょう
template<typename PointT>
class Parent {
public:
typedef boost::shared_ptr<Parent<PointT> > Ptr;
inline Ptr
makeShared ()
{
return Ptr (new Parent<PointT> (*this));
}
};
template<typename PointT>
class Child : public Parent {
public:
typedef boost::shared_ptr<Child<PointT> > Ptr;
};
ここで、Ptr と makeShared() の定義をジェネリックに書き直して、子クラスのインスタンスから makeShared() を呼び出すと、親ではなく子クラスへのポインターが生成されるようにします。
より明確にするために、Parent を継承する任意のクラスで makeShared() を呼び出すと、その継承クラスのインスタンスへのポインターが与えられます。親クラスで make shared() を呼び出すと、親クラスのインスタンスへのポインタが与えられます。何かアイデアはありますか?