my_max模板

来源:互联网 发布:玫瑰味香水 知乎 编辑:程序博客网 时间:2024/05/17 04:44

  在写template程序的时候.经常有个疑问,你怎么知道class T一定有个.val变量.或者一定有一个.next()函数?一旦用户的类缺少某一个函数.那就会得到毫 不夸张的说 一大坨错误.

  解决的方法一般是加上大量的注释.又有代码和注释不一致的可能性.维护注释是一件很麻烦的事情,因为编译器不会告诉你注释哪里有错误.

 

即便是加了注释也不一定能解决问题,用户的类可能已经实现了一个比较函数,但是不叫operator>()

 

我想让这个点既能按照x方向比较,又能按照y方向比较,甚至是-z,或者3x-y+25z

这个operator>()就没法完成任务了.

std:: 提供了另一种方法, 在参数中 多传一个 函数/函数对象 用于比较大小.

原型是pred(x, y).

有没有不申请新函数的解决方法? 有.

上面的 R T::*pv 是一个对象成员指针. 可以赋值为&point_3D::x 之类的值.

这样使用:

 

当然,也可以用成员函数指针,更灵活一些.

原创粉丝点击