gpt4 book ai didi

c++ - 找出类(class)及其 child 中的类(class)类型

转载 作者:行者123 更新时间:2023-11-28 03:32:30 25 4
gpt4 key购买 nike

假设我有课

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() 会给出一个指向父类实例的指针有什么想法吗?

最佳答案

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

关于c++ - 找出类(class)及其 child 中的类(class)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com