找出班级内部的班级类型及其孩子

find out the class type inside the class and its children

本文关键字:孩子 类型 内部      更新时间:2023-10-16

假设我有类

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()的定义,使其成为泛型,这样从子类实例调用makeShare()将产生指向子类而不是父的指针

为了更清楚地说明,对任何继承Parent的类调用makeShared()都会提供一个指向该继承类实例的指针。在父类上调用makeshared()将提供一个指向parent类实例的指针有什么想法吗?

CRTP将在此处工作:

template<typename Child>
class Parent {
  public:
  typedef boost::shared_ptr<Child> Ptr;
  inline Ptr
  makeShared ()
  {
    return Ptr (new Child(*static_cast<Child *>(this)));
  }
};
template<typename PointT>
class Child : public Parent<Child> {
};

注意,makeShared是一个相当令人困惑的名称,因为它可能与shared_from_this(在C++11和Boost中)混淆。方法的一个更典型的名称是clone