<分区>
Possible Duplicate:
How can overloading operator “function call” in C++ be useful?
我经常看到括号运算符 operator()
在类或结构上被重载。我自己从来没有遇到过这样的需求,想知道这个运算符的典型用途/需求是什么?
例如,重载 operator==
被接受为返回 true 或 false,基于与提供的参数的某种相等性。这具有特定的可接受和预期的行为。
<分区>
Possible Duplicate:
How can overloading operator “function call” in C++ be useful?
我经常看到括号运算符 operator()
在类或结构上被重载。我自己从来没有遇到过这样的需求,想知道这个运算符的典型用途/需求是什么?
例如,重载 operator==
被接受为返回 true 或 false,基于与提供的参数的某种相等性。这具有特定的可接受和预期的行为。
最佳答案
它被大量用于 STL 的散列、集合和算法组件,以构建称为“仿函数”的东西。例如:
using stl::map ;
map<string, string> myMap ;
但是如果您查看 map 的规范,它还包含一个默认为 less 的“比较”条目。 Compare 是您希望 map 在比较两个键时使用的“仿函数”。它看起来像这样:
template<class Key>
class less<Key> {
public:
boolean operator()(const Key& a, const Key& b) { return a < b ;}
} ;
所以你拥有的是:
map<string, string, less<string> > myMap ;
每当你在 map 中放置一些东西或试图在 map 中找到一些东西时,它都会使用 less::operator() 来进行比较。
您可以使用它来实现其他效果,例如在使用“排序”时,您可以使用不同的仿函数进行排序以按相反的顺序生成项目。
关于c++ - operator() 的典型用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049242/