在结构体内部定义operator()函数
Defining operator() function inside a struct
在阅读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
类型的对象可以对其应用函数调用操作符(操作数为int
和int
);这样的调用将返回一个float
。"
boost::function
是任何可调用的包装器。由于int_div
类型的对象可以与函数调用操作符一起使用,因此它是可调用的,因此可以存储在boost::function
中。类型也匹配——int_div
中的操作符确实是float(int, int)
类型的。
int_div
的对象,并将该对象赋值给f
。"
如果您使用的是c++ 11,您可以将第#10行写成:
f = int_div{};
,这可能有助于你的困惑。这一行创建了一个int_div
类型的临时对象,然后将其赋值给f
。
这不是一个函数调用,尽管它看起来像一个。
相关文章:
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法引用该函数" std:: variant <_Types...> operator =",因为此函数已被删除
- 无法赋值,因为函数'operator[]'返回常量值
- 错误:使用复制和交换习惯用法的交换函数中"operator="的重载不明确
- std::p riority_queue<struct with const member&> - 'operator =' 函数不可用
- 为什么C++不为枚举类型提供默认"operator>>"函数?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 无法使用"enable_if"和"is_base_of"将模板函数"operator+"的重载限制到我的类层次结构
- 错误C2244无法将函数定义与CPP // Operator Overloading中的现有声明匹配
- 绑定到 std::operator== 时未解决的重载函数错误
- 为什么我们可以检测 SFINAE 中 operator() 的默认参数值的存在,而不是自由函数和 PMF 的默认参数值
- 'operator new':函数不接受 2 个参数
- 为什么 operator[] 必须是非静态成员函数
- 错误 C2661:'CObject::operator new':没有重载函数需要 4 个参数
- 错误 35 错误 C2661:'operator new':没有重载函数占用 2 个参数
- C++ - 函数对象"equal_to"与"operator=="
- istream::operator>>( const char& ) 没有这样的函数是如何实现的?
- 如何调用模板化函数的非专用版本 QList::operator<<
- 替换函数'operator new'不能声明'inline' [-werror,-winline-new-delete]