在结构体内部定义operator()函数

Defining operator() function inside a struct

本文关键字:函数 operator 定义 结构体 内部      更新时间:2023-10-16

在阅读Boost库中有关函数包装器的教程时,我遇到了以下代码:

  1     boost::function<float (int x, int y)> f;
  2
  3     struct int_div {
  4         float operator() (int x, int y) const { return ((float)x)/y; }
  5     };
  6
  7
  8     int main()
  9     {
 10         f = int_div();
 11         cout << f(5, 3) << endl;
 12         return 0;
 13     }

我试图把我的头围绕定义一个函数(operator())内部的结构,然后分配结构(使用())到函数包装f。有人能帮我理解发生了什么,就概念而言,在第3-5行和第10行。

在c++中,您可以为您的类型提供操作符。由于函数调用(())只是语言中的另一个操作符,因此可以为您的类型定义它。因此,int_div内部的定义说:"int_div类型的对象可以对其应用函数调用操作符(操作数为intint);这样的调用将返回一个float。"

boost::function是任何可调用的包装器。由于int_div类型的对象可以与函数调用操作符一起使用,因此它是可调用的,因此可以存储在boost::function中。类型也匹配——int_div中的操作符确实是float(int, int)类型的。

然而,第10行中的圆括号不是对该操作符的调用;它们是构造函数调用。因此,这行代码是"使用该类型的默认构造函数创建一个类型为int_div的对象,并将该对象赋值给f。"

如果您使用的是c++ 11,您可以将第#10行写成:

f = int_div{};

,这可能有助于你的困惑。这一行创建了一个int_div类型的临时对象,然后将其赋值给f

这不是一个函数调用,尽管它看起来像一个。

相关文章: