关于C++模板和运算符重载的一个小问题

时间:2021-01-13 19:10:58
template <class T>
class List
{
struct Item
{
T data;
Item *next;
};
public:
List();
~List();
T max(T x[],int n)
{
int i;
T maxv = x[0];
for (i = 1; i<n; i++)
if (maxv<x[i])
maxv = x[i];
return maxv;
};
bool operator<(const T&, const T&);//有错
bool isEmpty() const;
int length() const;
const T &at(int k) const;
int search(const T &v);
void remove(int k);
void insert(int k, const T &v);
void output();
private:
Item *header;
};


我想对<进行运算符重载,因为max函数中使用了<,但是T的类型是未知的,可能是double 可能是char[]字符串,所以我想根据不同类型的T进行不同的比较,请问要怎么写,或者怎么改写这个max函数

5 个解决方案

#1


不需要对<进行重载,只要T是内置类型,都可以比较

#2


楼主没啃过《stl源码剖析》吧。
基础语法的不足,这个任务对楼主是困难了些。

#3


引用 1 楼 zhangxiangDavaid 的回复:
不需要对<进行重载,只要T是内置类型,都可以比较

那如果T是char*的字符串,<不就不能比较了么?不是要用strcmp么

#4


引用 1 楼 zhangxiangDavaid 的回复:
不需要对<进行重载,只要T是内置类型,都可以比较

那个max里面我忘改了,有点问题,max就是返回List中T的最大值

#5


T的operator<应该由T提供,不应该list来提供,list的operator<应该是这样的
template<class T> bool operator<(const List<T>&, const List<T>&);

#1


不需要对<进行重载,只要T是内置类型,都可以比较

#2


楼主没啃过《stl源码剖析》吧。
基础语法的不足,这个任务对楼主是困难了些。

#3


引用 1 楼 zhangxiangDavaid 的回复:
不需要对<进行重载,只要T是内置类型,都可以比较

那如果T是char*的字符串,<不就不能比较了么?不是要用strcmp么

#4


引用 1 楼 zhangxiangDavaid 的回复:
不需要对<进行重载,只要T是内置类型,都可以比较

那个max里面我忘改了,有点问题,max就是返回List中T的最大值

#5


T的operator<应该由T提供,不应该list来提供,list的operator<应该是这样的
template<class T> bool operator<(const List<T>&, const List<T>&);