Thursday, December 16, 2010

c++ Function Object

1. std::functional,包括:

   1.1 常用的数学运算工具。如plus/minus/multiplies/divides/modulus,equal_to/not_equal_to/greater/less/greater_equal/less_equal,logical_and/logical_or;

   1.2 一套adaptor工具,根据已有的function object得到新的function object。如bind1st/bind2nd/not1/not2;

   1.3 一套conversor工具,把普通的function pointer和member function转换成function object。如ptr_fun/mem_fun/mem_fun_ref;

   std::functional各功能块的关系如图所示:


    1.4 std::functional的局限:严格的类型匹配(不只是参数类型匹配),使std::functional的运用主要局限于具体的template算法中(如std::algorithm),而对系统框架/接口的设计没有太大帮助。

2. boost::functional

    对std::functional的增强,主要集中在两点,一是避免references to references(参数是引用的引用,语法错误)的问题,二是可以消除ptr_fun这个conversor的使用

4. boost::lambda

    就地生成匿名function object,有助于写出更清晰简洁的代码。类似于其它语言中的闭包(enclosure)
 
5. boost::function

    一个function object封装器,能把接口相同(输入输出参数一致)的各种function object 封装在一起,完成类似C#中的delegate(委托)功能。boost::function能提供一个统一的interface,在系统设计时很有用。

    缺点:1.比一般的function call或function object需要更多的运行时开销;2.有可能需要在Heap中分配内存。

No comments: