设为首页 加入收藏

TOP

类似Common Lisp的多参数加法(一)
2014-07-19 23:03:21 来源: 作者: 【 】 浏览:144
Tags:类似 Common  Lisp 参数 加法

    c++实现类似Common Lisp的多参数加法和比较

    在CL里我们可以这样:

    1 $ sbcl

    2 * (+ 1 2 3)

    3 6

    4 * (< 1 2 3)

    5 T

    6 * (< 2 3 1)

    7 NIL

    8 *

    从简单的方面看, CL的+和<就是一个接收多参数的函数,有点类似cpp的add(1,2,3)和less(1,2,3)这样。

    所以当C++11开始有了变参模板以后, 就可以玩多参数的加法和多参数比较了

    1 #include <functional>

    2 template<typename O, typename A,typename B>

    3 bool cmp(O o, A a,B b){

    4     return o(a, b);

    5 }

    6 template<typename O, typename A,typename B,typename… C>

    7 bool cmp(O o,A a,B b,C… c){

    8     return o(a, b) and cmp(o,b,c…);

    9 }

    10 template<typename O, typename A,typename B>

    11 A reduce(O o, A a,B b){

    12     return o(a, b);

    13 }

    14 template<typename O, typename A,typename B,typename… C>

    15 A reduce(O o,A a,B b,C… c){

    16     return reduce(o,o(a, b),c…);

    17 }

    18

    19 bool foo(int a,int b,int c,int d){

    20   return cmp(std::less<int>(), a,b,c,d);

    21 }

    22 int bar(int a,int b,int c,int d){

    23   return reduce(std::plus<int>(), a,b,c,d);

    24 }

    可能有人会说,这不是坑爹么, 先不管写法比CL的丑, 你还递归调用了,简直弱爆了……

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++迭代器失效的问题汇总 下一篇libjingle线程机制

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)