找出类及其子里面的类类型(find out the class type inside the cl

2019-07-31 03:40发布

比方说,我有类

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()的定义是通用的,这样从子类(ES)的实例调用makeShared()会产生一个指向子类而不是父

为了更清楚调用任何类继承父makeShared()会给一个指向继承类的一个实例。 和呼叫拨打共享()在父类将使一个指向父类中的任何想法的一个实例?

Answer 1:

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和升压)。 为你的方法更典型的名称是clone



文章来源: find out the class type inside the class and its children