排序STL列表的子类

Sorting a subclass of STL list

本文关键字:子类 列表 STL 排序      更新时间:2023-10-16

考虑我创建的一个名为myList的模板化类,它基本上扩展了c++ STL中提供的std::list对象。我已经覆盖了一些功能,如size(), front()back(),但没有触及std::list提供的sort()功能。

基本上,我希望能够排序myList,考虑我的装饰器实现:

#import "myList.h"
template <typename T>
class myListDecorator : public myList<T> {
public:
    myListDecorator() : m_list(myList<T>()){}
    myListDecorator(const myList<T> &my_list) {
        m_list = my_list.sort();
    }
private:
    myList<T> m_list;
};

每当我创建myList(在这些情况下使用类型为double的对象),我得到以下错误:

Candidate function not viable: no known conversion from 'const myList<double>' to 'std::list<double, std::allocator<double>>' for object argument

我是否必须在myList中覆盖sort()函数并实现我自己的排序才能正常工作?

编辑:

一些评论指出,在这个类中实际上有两个myList对象是多么令人困惑。我已经更新了我的代码更"正确"/"最佳实践"。它现在做了我想要它做的事情,并且更加整洁:

#include "myList.h"
template <typename T>
class myListDecorator : public myList<T> {
public:
    myListDecorator() : myList<T>(myList<T>()){}
    myListDecorator(const myList<T> &my_list) : myList<T>(my_list){
        this->sort();
    }
};

您的my_listconstsort()成员函数可以就地修改列表,而不能对常量列表进行修改。(注意sort()的返回类型是void)

你应该能够:

myListDecorator(const myList<T> &my_list): m_list(my_list) {
    m_list.sort();
}

原因是您试图将const myList强制转换为非const类型。顺便说一句,'#import'不是标准的C/c++预处理器语句。