感觉不行,智能指针不支持协变
压入时加static_pointer_cast/dynamic_pointer_cast进行转换?
【 在 anything1999 的大作中提到: 】
: 标 题: 问一个模板类容纳智能指针的双向链表的写法
: 发信站: 水木社区 (Thu Feb 1 11:55:08 2024), 站内
:
: template <class T>
: class Dlist {
: private:
: class Dnode {
: public:
: T data;
: Dnode* next;
: Dnode* prev;
:
: Dnode() :next(nullptr)
: , prev(nullptr){}
:
: Dnode(const T& value)
: : data(value)
: , next(nullptr)
: , prev(nullptr)
: {}
: };
:
: Dnode* head;
: Dnode* tail;
: size_t sz;
:
: public:
: Dlist() : head(nullptr), tail(nullptr), sz(0) { }
:
: ~Dlist() {
: clear();
: }
:
: void clear() {
: Dnode* curr = head;
: while (curr != nullptr) {
: Dnode* nxt = curr->next;
: delete curr;
: curr = nxt;
: }
: head = tail = nullptr;
: sz = 0;
: }
: }
:
: 使用的时候我这么声明:Dlist<std::shared_ptr<A>> lst;
: 其中A是基类,里面有虚函数,B和C派生自A
: lst里面可能会压入std::shared_ptr<B>也有可能压入std::shared_ptr<C>
:
: 那么Dnode和Dlist该怎么设计,现在的代码有问题,不支持多态。
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 223.104.40.*]
--
FROM 223.72.75.*