=================箴言:函数模板是无法进行重载的==================== 函数模板是无法进行重载的,这个原因比较无语。不是C++规定的,而是我们根本就无法这样做,因为如果这样做了,编译器根本就认不到~~下面我们就举一个例子来说所这个问题:
首先在这个程序的第3行我们定义了一个结构体变量people,它含有两个参数,名字(name)和年龄(age)。然后我们在程序的第9行到15行写了一个模板函数Swap(),它的作用就是交换a和b中的值。在主程序中,我们首先在20行调用Swap()函数来交换整型变量x和y的值;之后我们在程序的第22和23行分别用结构体people定义了两个人person_1和person_2的名字和年龄,然后我们想在程序的第26行交换他们。输出如下: 可以看到,在输出中我们调用Swap()函数之后,第一个人和第二个人其实只是对换了一下位置。即person_1里面存储的就是jack和30,而 person_2里面存储的就是unique和22。反正我觉着这种程序在实际生活中没有任何意思,因为不就是调换一下位置么。真正有难度的是如何让 jack的年龄和unqiue的年龄进行对调!下面我们就来看看这种程序:
在这个程序中,我们只想交换 jack和unique的年龄,但是这是不可能通过重载Swap()函数实现。因为这里的Swap()函数并不涉及的到功能的升级啊之类的。所以它的返回 值和参数的类型和在第9行定义的Swap()函数是一模一样的,这样一来,编译器就不能分辨出到底哪个Swap()函数才是我们想要的。所以在程序的第 18行,我们只能用另外一个函数Swap_1()来代替原先那个Swap()函数,虽然它们的功能基本上相同~~ 程序的输出结果如下: 上面这种解决办法我想是一件极其郁闷的事情!如果我们都像程序的第18行到24行这样来运用模板,那模板的作用就根本没有发挥出来嘛。我们还不如把程序的17行到24行换成:
这样的输出结果同上,囧!这样一来,模板真正没有什么存在的价值了!!!OK~~通过这两个程序的对比,我们就可以看出来函数模板是无法重载的。那么我们有没有什么其他的办法来解决这个问题的呢?如何才能让重载函数模板呢? 答案请见下次的笔记,^_^ |
|