在谷歌C++风格指南中,操作员超载一节建议不要超载任何操作符(“除非在罕见的特殊情况下”)。具体而言,委员会建议:
特别是,不要重载
operator==或operator<,这样您的类就可以作为STL容器中的键使用;相反,在声明容器时,应该创建相等和比较函式类型。
我有点模糊这样的函子会是什么样子,但我的主要问题是,你为什么要为这个写你自己的函子?定义operator<和使用标准的std::less<T>函数不是更简单吗?用一种比另一种有什么好处?
发布于 2008-10-08 16:29:05
好吧,根据你引用的网页,函子没有多大优势(“操作人员可以欺骗我们的直觉,认为昂贵的操作是廉价的、内置的操作”)。
我的感觉是,一个人应该努力使你尽可能地将一流的对象分类,对我来说,这意味着让他们理解尽可能多的操作人员。
我已经有一段时间没有写函子了,但是它看起来是这样的:
class MyClass {....}
class LessThanMyClass : std:binary_function<MyClass, MyClass, bool>
{
public bool operator()(MyClass lhs, MyClass rhs)
{ return /* determine if lhs < rhs */ ; }
}
vector<MyClass> objs;
std::sort(objs.begin(), objs.end(), LessThanMyClass());}
https://stackoverflow.com/questions/183606
复制相似问题