
functionoid可以传递ctor参数,而函数指针则不可以。这有什么用?
freeze-dried partially-completed function-call。先传递部分参数通过构造函数,然后再把剩下的参数通过指针传递,这时系统获得原先传递的,结合本地变量,再结合后续传递的参数,使得函数继续执行。也就是说可以反复地调用这个函数,但是每次传递的后续参数可以不相同。functioniod能够记住从一次调用到下一次调用的信息。类似static?
functionoid的好处之一是可以有不同的参数的函数在同一数组中,这些不同参数的函数需要有至少一个共同的参数。先通过各自的构造函数,把不同的参数部分作为成员变量初始化。在设计各自的同名同参同返回值成员函数,并在调用时传递给它同样的参数。
functioniod可以调用之间维持状态,以一种线程内安全的方式(不太理解)。通过普通的函数指针,可以通过static数据在调用之间维持状态,但是static数据不是线程安全的,它在所有的线程之间共享。将旧的static数据变为functioniod this对象的数据成员,不仅是线程本地的,而且在递归调用时也是安全的。所以funtionoid可以让调用者决定是使用线程本地还是线程全局的数据。
在更多的时候functioniod被称为functors。A functor is an instance of a class or struct that can be treated syntactically as a function. 这句话也许更加形象的说明了functors的作用,一个functor是一个类或者结构的实例,在语法上可以认为是一个函数。
function adaptor是一个允许函数或functors向结合,或是能够进行参数绑定。使得程序更具可读性。