返回值类型为void
的函子有没有用?
我能想到的唯一用途是非恒定引用传入的参数对参数进行某种操作,然后将其返回给调用程序。但是在这种情况下,正常功能似乎更好(我应该说更简洁)。
使用void仿函数有什么好处?
[]有很多不返回值的函子用途(就像不返回值的函数有许多用途一样)。我首先想到的是图形用户界面(GUI)中的按钮。通常,GUI框架定义一种指定单击按钮时要调用的回调的方法。在我所研究的框架中,此回调不返回任何内容-既不通过返回值也不通过输出参数。如果框架是为C编写的,则回调可能作为函数指针提供。如果该框架是为C ++编写的,则回调可能作为函数对象(函数器)提供,以提供更大的灵活性。
例如,gtkmm使用sigc::slot
对象形式的回调。 The documentation确认它们是“函子”:“插槽是一个看起来和感觉像函数的对象,但实际上是一个对象。也称为函数对象或函子。”
Gtk::Button::signal_clicked()
的原型匹配,碰巧是Gtk::Button::signal_clicked()
。也就是说,要使按钮执行某项操作,请使用不带参数且返回void function_name()
的仿函数。有用。