由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个c++的template的问题
相关主题
一个C++ template的问题[合集] 又被羞辱了一把... (转载)
C++ template question一个c++小问题
用STL map的时候怎么自己定义大小比较的关系这两种容器定义形式有区别吗?
谁给详细说一下这句why use static function here?
C++ linking 弱问 (one file)问个overloading new operator的问题
一个关于C++ template和overload的问题有段c++代码看不懂
C++ template一个关于关键字typename的问题
a c++ questionquestion overloading ++ error
相关话题的讨论汇总
话题: operator话题: template话题: 类型话题: const话题: typename
进入Programming版参与讨论
1 (共1页)
y****i
发帖数: 23
1
假设要写一个通用类型的binary search tree
class的定义大致是这样子的
template
class BST{
private:
T key;
T * left;
T * right;
public:
insert...
delete...
}
问题是,在写插入算法的时候牵涉到数据的比较,但是T啥类型我们又不知道,有可能
int,也有可能是struct,怎么比较两个T类型的变量呢?
t****t
发帖数: 6806
2
参考STL的做法.
STL的做法是在模板参数里提供一个compare类型, 有缺省值, 比如map
template , ...>
class map { ... };
less::operator()(T, T)对于大多数类型, 就是operator<.
对于struct S, 你可以提供
bool operator<(const S&, const S&)
或者你不想要<, 你想要>, 可以写map >

【在 y****i 的大作中提到】
: 假设要写一个通用类型的binary search tree
: class的定义大致是这样子的
: template
: class BST{
: private:
: T key;
: T * left;
: T * right;
: public:
: insert...

y****i
发帖数: 23
3
哦,想通了,多谢。:)
也可以把T的operator<需要的时候overload一下,是么?

【在 t****t 的大作中提到】
: 参考STL的做法.
: STL的做法是在模板参数里提供一个compare类型, 有缺省值, 比如map
: template , ...>
: class map { ... };
: less::operator()(T, T)对于大多数类型, 就是operator<.
: 对于struct S, 你可以提供
: bool operator<(const S&, const S&)
: 或者你不想要<, 你想要>, 可以写map >

t****t
发帖数: 6806
4
overload不对.
less期望的operator<的原型就应该是
bool operator<(const T&, const T&)
或者
bool operator<(T, T)
要overload的话原型必须不同, 但是原型不同就没法调用了

【在 y****i 的大作中提到】
: 哦,想通了,多谢。:)
: 也可以把T的operator<需要的时候overload一下,是么?

l**a
发帖数: 43
5
我觉得LZ是说如果T本来没有定义operator<的话,可以参照bool operator<(const T&,
const T&)写一个

【在 t****t 的大作中提到】
: overload不对.
: less期望的operator<的原型就应该是
: bool operator<(const T&, const T&)
: 或者
: bool operator<(T, T)
: 要overload的话原型必须不同, 但是原型不同就没法调用了

y****i
发帖数: 23
6
我明白你的意思啦,多谢。
从你的建议的提示,我想到可以这么做
template
class BST{
.....
}
在T的定义里面overload <,>,=这些需要用到的operator
这样在class BST里面就可以直接比较两个T类型的变量

【在 t****t 的大作中提到】
: overload不对.
: less期望的operator<的原型就应该是
: bool operator<(const T&, const T&)
: 或者
: bool operator<(T, T)
: 要overload的话原型必须不同, 但是原型不同就没法调用了

y****i
发帖数: 23
7
嗯,我是这个意思。:)

&,

【在 l**a 的大作中提到】
: 我觉得LZ是说如果T本来没有定义operator<的话,可以参照bool operator<(const T&,
: const T&)写一个

1 (共1页)
进入Programming版参与讨论
相关主题
question overloading ++ errorC++ linking 弱问 (one file)
请问关于overloading <<一个关于C++ template和overload的问题
菜鸟读C++ STL源程序的疑问C++ template
boost::function 的 syntax 问题a c++ question
一个C++ template的问题[合集] 又被羞辱了一把... (转载)
C++ template question一个c++小问题
用STL map的时候怎么自己定义大小比较的关系这两种容器定义形式有区别吗?
谁给详细说一下这句why use static function here?
相关话题的讨论汇总
话题: operator话题: template话题: 类型话题: const话题: typename