使用operator()

Nay*_*iya 0 c++ operators

我对()运营商的问题很少.请帮我明白一点.

  1. ()运算符(()运算符重载)的用途是什么.
  2. 它应该在哪种情况下使用.
  3. ()操作员使用的实际例子是什么(在哪些情况下有用,方便或适合使用()操作员).

Lig*_*ica 5

它主要用于函数对象来模拟函数调用.

#include <iostream>

struct Functor
{
   void operator()() {
      std::cout << "lol\n";
   }
};

int main()
{
   Functor f;
   f();  // output: "lol"
}
Run Code Online (Sandbox Code Playgroud)

现场演示

一个人为的例子,是的,但是这对构造函数参数变得更加复杂,比如说,存储这个仿函数用于算法.它在C++标准库中很常见.


你不具备以这种方式来使用它; 另一个例子是模拟多维数组访问:

#include <vector>

template<typename T>
struct Matrix
{
   Matrix(unsigned m, unsigned n)
      : m(m), n(n), vs(m*n) {}

   T& operator()(unsigned i, unsigned j)
   {
      return vs[i + m * j];
   }

private:
   unsigned m;
   unsigned n;
   std::vector<T> vs;

};

/**    
 *       _~
 *    _~ )_)_~
 *    )_))_))_)
 *    _!__!__!_
 *    \______t/
 *  ~~~~~~~~~~~~~
 */
int main()
{
   const unsigned int WIDTH = 3;
   const unsigned int HEIGHT = 3;

   Matrix<long> m(WIDTH, HEIGHT);
   m(1,1) = 42;
}
Run Code Online (Sandbox Code Playgroud)

这个是有用的,因为operator[]可能只需要一个参数(尽管该参数可以是初始化列表,这是一种解决方法).