程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++實現類似Common Lisp的多參數加法和比較

c++實現類似Common Lisp的多參數加法和比較

編輯:關於C++

在CL裡我們可以這樣:

$ sbcl
* (+ 1 2 3)
6
* (< 1 2 3)
T
* (< 2 3 1)
NIL
*

從簡單的方面看, CL的+和<就是一個接收多參數的函數,有點類似cpp的add(1,2,3)和less(1,2,3)這樣.

所以當C++11開始有了變參模板以後, 就可以玩多參數的加法和多參數比較了

#include <functional>
template<typename O, typename A,typename B>
bool cmp(O o, A a,B b){
    return o(a, b);
}
template<typename O, typename A,typename B,typename... C>
bool cmp(O o,A a,B b,C... c){
    return o(a, b) and cmp(o,b,c...);
}
template<typename O, typename A,typename B>
A reduce(O o, A a,B b){
    return o(a, b);
}
template<typename O, typename A,typename B,typename... C>
A reduce(O o,A a,B b,C... c){
    return reduce(o,o(a, b),c...);
}
   
bool foo(int a,int b,int c,int d){
  return cmp(std::less<int>(), a,b,c,d);
}
int bar(int a,int b,int c,int d){
  return reduce(std::plus<int>(), a,b,c,d);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved