[ create a new paste ] login | about

Link: http://codepad.org/ieS3W2aO    [ raw code | fork ]

C++, pasted on Apr 8:
#include <iostream>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/greater.hpp>
#include <boost/mpl/comparison.hpp>
#include <boost/mpl/size_t.hpp>

using namespace boost;

template <typename Interp>
struct S {
  static void Process( int x )
  {
    Interp::Call( x );
  }

 static void Process( int x,
                      typename enable_if< mpl::greater< typename Interp::NbrArgs, mpl::size_t<0> >, typename Interp::Arg0 >::type a0
                    )
 {
   Interp::Call( x, a0 );
 }

 static void Process( int x,
                       typename enable_if< mpl::greater< typename Interp::NbrArgs, mpl::size_t<0> >, typename Interp::Arg0 >::type a0,
                       typename enable_if< mpl::greater< typename Interp::NbrArgs, mpl::size_t<1> >, typename Interp::Arg1 >::type a1
                     )
 {
    Interp::Call( x, a0, a1 );
 }
};

struct Linear0 {
  typedef mpl::size_t<0> NbrArgs;
  typedef void   Arg0;
  typedef void   Arg1;
  static void Call( int x )
  {
  }
};

struct Linear1 {
  typedef mpl::size_t<1> NbrArgs;
  typedef double Arg0;
  typedef void   Arg1;
  static void Call( int x, Arg0 a0 )
  {
  }
};

struct Linear2 {
  typedef mpl::size_t<2> NbrArgs;
  typedef double Arg0;
  typedef double Arg1;
  static void Call( int x, Arg0 a0, Arg1 a1 )
  {
  }
};

int main(int)
{
  S<Linear0>::Process( 5 );
  S<Linear1>::Process( 5, .5 );
  S<Linear2>::Process( 5, .5, .6 );

  return 1;
}


Create a new paste based on this one


Comments: