Nel*_*man 4 c++ operator-overloading
C++中operator()的含义是什么?我发现它经常用于“函子”或函数对象,例如比较器。那么这些函数是如何调用的呢?在其他情况下有用吗?我可以为这样的运算符声明多少个参数?例如,以下内容可以接受吗?
bool operator() (Foo f, Baz b, Quz q, Oik o) {...}
Run Code Online (Sandbox Code Playgroud)
假设您有一个已定义的函数对象Func类operator()。如果您有该类的实例,则只需在引用该实例的表达式后面放置括号即可:
Func myFunc;
myFunc(); // Calls the operator() member function
Run Code Online (Sandbox Code Playgroud)
作为标准库中的示例,我们可以看看std::less哪个是二进制函数对象:
std::less<int> myLess; // Create an instance of the function object
std::cout << myLess(5, 6) << std::endl; // Is 5 less than 6?
Run Code Online (Sandbox Code Playgroud)
另一个常见用途operator()是创建 Matrix 类。您可以定义T& Matrix::operator()(int,int)从矩阵中检索元素,例如myMatrix(1,2)。
可以采用的参数数量operator()与任何其他函数相同。但这是实现定义的。您的实现应允许的建议最小参数数量为 256(在标准的附录 B 中给出)。
operator()的查找在标准 (ISO/IEC 14882:2003 §13.3.1.1.2) 中定义为:
如果函数调用语法中的主表达式
E求值为“”类型的类对象cv T,则候选函数集至少包括 的函数调用运算符T。的函数调用运算符是通过在 的上下文中T普通查找名称来获得的。operator()(E).operator()
翻译:如果使用expression()括号之前的语法和表达式进行函数调用,则将其计算为类的实例,然后将对象operator()成员函数添加到可以调用的候选函数列表中。