使用模板集合的不同排序方法

时间:2017-01-18 16:26:31

标签: c++ list sorting templates

对不起,如果此论坛上已存在类似问题,请尽可能给我链接。

我有一个模板类

template<typename type>
class DoublyLinkedList {};

我想在其中安装Sort方法。

template<typename type>
class DoublyLinkedList
{
public:

void Sort(){}

};

但是list是模板,因此它可以包含不同的类型。那么我如何为我预见的所有类型创建方法呢?我试着用这种方式:

template<typename type>
class DoublyLinkedList
{
public:

void DoublyLinkedList<int>::Sort(){}
void DoublyLinkedList<string>::Sort(){} 

};

但这是错的。请帮忙。

1 个答案:

答案 0 :(得分:1)

标准库通常处理此问题的方式是允许用户指定自己的比较函数。您可以添加模板化参数,您的类型的用户可以使用它来提供比较功能,如std::sort。在sort的实现中,您假设comparer是一个比较列表中两个元素的函数,而不是第一个应该在第二个元素之前返回。

#include <string>
template<typename type>
class DoublyLinkedList
{
public:
    template<class Comp>
    void Sort(Comp comparer);

};

void foo(DoublyLinkedList<std::string> & list)
{
    // Sort list by length of strings
    list.Sort([](const std::string p_left, const std::string p_right){
        return p_left.size() < p_right.size();
    });
}