对STL列表的子类进行排序

时间:2014-05-12 03:38:29

标签: c++ list sorting c++11 stl

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

基本上,我希望能够对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

我是否必须覆盖sort()中的myList函数并实现我自己的排序才能生效?

修改

其中一些评论指出,在这个类中有效地拥有两个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();
    }
};

2 个答案:

答案 0 :(得分:2)

您的my_listconstsort()成员函数修改了列表,并且不能使用常量列表。 (请注意,sort()的返回类型为void。)

你应该能够:

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

答案 1 :(得分:0)

原因是您正在尝试将const myList转换为非const类型。 BTW,&#39; #import&#39;不是标准的C / C ++预处理器语句。