2011-08-18 110 views
-2

函数指针函子吗?是否有一个虚拟仿函数可以帮助兄弟仿函数静静地编译?函数指针和函子

+5

什么是兄弟函子? –

+0

或虚拟函子 –

+0

C++ 11引入了“可调用类型”的概念,这意味着(松散地)某些像'INVOKE(yourthing,a,b,c)'这样的结构扩展为'yourthing(a, b,c)',必须有意义;它包含函数指针和函数,可能是一般思考的好方法。 –

回答

4

至少与术语在C常使用++(警告:它的使用完全不同相对于其它语言如Haskell中),一个仿函数是一个类(或类的一个实例),该过载operator()所以它可以像一个函数一样被调用。

因为它们使用相同的语法,所以可以写一个模板来接受函数指针或函数互换实例。然而,并非所有的算法都会这样做 - 有些人预计(例如)您为argument_typeresult_type之类的东西提供了typedef。标准库提供了几个类(unary_functionbinary_function)作为你的函子的基类来提供这些类。如果你愿意,你可以自己提供 - 这些基类纯粹是为了方便(有些人不觉得它们特别方便)。

+0

+1,但补充说一个函数指针不是*实际*函子,尽管它可以用于需要其中的模板。 – Wyzard

+0

我一直听到和定义过,functor是可以调用的任何东西,无论是函数对象还是实际函数。而你所称的函子是一个函数对象。 –

+0

非常感谢,我无法赞成,但已将您的答复标记为已接受的答案,这非常有用。 –

0

函数指针是实函数的地址。一个函子是一个类,operator()已经超载;这些类的实例可以作为函数传递并使用相同的语法进行调用。所以不,函数指针不是函子。

我不知道“virtual functors”或“sibling functors”是什么,所以我无法回答你的第二个问题。

+0

谢谢你的解释 –