c++ - 重载 "function call"运算符有什么用?

标签 c++ operator-overloading functor function-object

我最近发现在 C++ 中你可以重载“函数调用”运算符,这是一种奇怪的方式,你必须写两对括号才能这样做:

class A { 
  int n;
public: 
  void operator ()() const; 
};

然后这样使用:

A a;
a();

这在什么时候有用?

最佳答案

这可用于创建 "functors" , 像函数一样工作的对象:

class Multiplier {
public:
    Multiplier(int m): multiplier(m) {}
    int operator()(int x) { return multiplier * x; }
private:
    int multiplier;
};

Multiplier m(5);
cout << m(4) << endl;

以上打印20。上面链接的维基百科文章提供了更多实质性示例。

关于c++ - 重载 "function call"运算符有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42060270/

相关文章:

c++ - Mac OS X 上的 Qt : How to get rid of QListView's blue outline?

c++ - 在 C++ 中重载 < 运算符的问题

c++ - 重载括号访问和赋值 C++

haskell - 函数组合运算符 (.) 和 fmap (<$>) 的区别

haskell - 在 Haskell 中的列表上映射 Functor

c++ - 如何在 C++ 中求和/异或二进制字符串?

C++ Boost:对 boost::system::generic_category() 的 undefined reference

c++ - 仅为特定模板类启用模板

c++ - 关于模板特化

haskell - fmap 的单子(monad) "versions"的名称是什么?