とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

みんなでたしざん

みんなでたしざん。みんななかよし。*1

/* 1: C/C++ */
int add(int x, int y)
{
 return x + y;
}

// 2: C++
template<typename T>
T Add(T x, T y)
{
 return x + y;
}

// 3: C++
template<int x, int y>
struct ADD{
 enum{ value = x + y };
};

// 4: C++
#include<functional>

// 5: C++
#include<boost/lambda/lambda.hpp>

// 6: C++
#include<boost/mpl/int.hpp>
#include<boost/mpl/plus.hpp>

/* 7: C/C++ */
#include<boost/preprocessor/arithmetic/add.hpp>

#include<iostream>
int main(){
 using std::cout;
 using std::endl;
 {// 1:
  const int x = 42, y = 64;
  cout << add(x, y) << endl;
 }
 {// 2:
  const int x = 42, y = 64;
  cout << Add(x, y) << endl;
 }
 {// 3:
  const int x = 42, y = 64;
  cout << ADD<x, y>::value << endl;
 }
 {// 4:
  const int x = 42, y = 64;
  cout << std::plus<int>()(x, y) << endl;
 }
 {// 5:
  using boost::lambda::_1;
  using boost::lambda::_2;
  const int x = 42, y = 64;
  cout << (_1 + _2)(x, y) << endl;
 }
 {// 6:
  typedef boost::mpl::int_<42> x;
  typedef boost::mpl::int_<64> y;
  cout << boost::mpl::plus<x, y>::value << endl;
 }
 {// 7:
#define x 42
#define y 64
  cout << BOOST_PP_ADD(x, y) << endl;
#undef y
#undef x
 }
}

実行結果:

106
106
106
106
106
106
106

*1:11/17 Boost.Lambda バージョンを追加