1

我是 C++ 新手,我的问题可能看起来很简单。我无法理解这些代码:

template<typename a, typename b>
bool operator < (const Pair<a,b> &op1 , const Pair<a,b> &op2)
{
    return (op1.first() < op2.first())
};

似乎 operator 是一个函数,它的输出类型是 bool。那么这个“模板”是干什么用的呢?因为这个模板是在类定义之前定义的。

     template<typename a, typename b>
     class Pair { ...
4

3 回答 3

2

该模板将替换任何出现a的类型b。这意味着您不必显式编写相同的代码来处理int,doubleint,intdouble,intdouble,double。没有模板,您必须为每种情况编写函数重载,或者依赖类型转换。

当您将该模板放在整个类上时,这意味着该类是专门为包含您提供的任何类型而构建的。所以Pair<a,b>可以Pair<int,double>等等...

于 2013-06-10T23:40:11.163 回答
1

那么这个“模板”是干什么用的呢?- 在这种情况下,它用于将动态类型参数传递给'<'运算符,这基本上是模板的使用,这样你就可以只声明一次你的类/方法,但你可以传递不同的数据类型给它. 在您的情况下,如果您不使用模板,那么您可能会为您的“<”运算符想要处理的每种数据类型创建重载方法。

顺便说一句:运算符不是函数,它是重载运算符的关键字,在这种情况下是'<'小于。

于 2013-06-10T23:40:37.240 回答
1

C++ 中的模板是定义泛型类的一种方式。

你说得对,this运算符是一个函数。

泛型类允许您定义不指定它们在方法中使用的通用类型的类。

这样您就可以定义Pair<int, string> param1并将Pair<int, string> param2它们应用于bool resultOfcomparision = param1 < param2

这将允许您根据intstring值确定哪个参数更大。

在此模板指南中阅读有关模板的更多信息

于 2013-06-10T23:43:55.117 回答