对不起,如果此论坛上已存在类似问题,请尽可能给我链接。
我有一个模板类
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(){}
};
但这是错的。请帮忙。
答案 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();
});
}