函数对象,重载调用()操作
函数对象,重载调用()操作
无奈的初弦 发表于4年前
函数对象,重载调用()操作
  • 发表于 4年前
  • 阅读 35
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 函数对象,仿函数的

函数对象(Function objects是指定义了函数调用操作符(operator())这一成员函数的任意对象。除了可以创建与操作自定义的函数对象以外,C++ 标准库还提供了大量的内置函数对象。

可以为类类型的对象重载函数调用操作符。一般为表示操作的类重载调用操作符。例如,可以定义名为 absInt 的结构,该结构封装将 int 类型的值转换为绝对值的操作:

struct absInt { 
    int operator() (int val) { 
        return val < 0 ? -val : val; 
    }
}

这个类很简单,它定义了一个操作:函数调用操作符,该操作符有一个形参并返回形参的绝对值。

通过为类类型的对象提供一个实参表而使用调用操作符,所用的方式看起来像一个函数调用: 

int i = -42; 
absInt absObj; // object that defines function call operator 
unsigned int ui = absObj(i); // calls absInt::operator(int)

尽管 absObj 是一个对象而不是函数,我们仍然可以“调用”该对象,效果是运行由 absObj 对象定义的重载调用操作符,该操作符接受一个 int 并值并返回它的绝对值。 

函数调用操作符必须声明为成员函数。一个类可以定义函数调用操作符的多个版本,由形参的数目或类型加以区别。 

定义了调用操作符的类,其对象常称为函数对象,即它们是行为类似函数的对象。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 25
码字总数 8623
×
无奈的初弦
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: