Hello,

    Often some function and functors requires to be overloaded N times to
handle undefinite number of arguments, depending on some default setting.
Maybe the following could be used; it overloads operator , () and gradually
creates a typelist.  This typelist is used to replace the undefinite number
of arguments:

#include <iostream>


using namespace std;


namespace infinite
{


template <typename T = void, typename U = void>
 struct typelist : U
 {
  typedef T type;

  T value;

  typelist(T const & a, U const & b) : value(a), U(b) {}
 };

template <>
 struct typelist<void, void>
 {
  typedef void type;
 };

template <typename T>
 struct typelist<T, void>
 {
  typedef T type;

  T value;

  typelist(T const & a) : value(a) {}
 };


typelist<> const begin = typelist<>();


}


template <typename V>
 infinite::typelist<V, void> operator , (infinite::typelist<> const &, V
const & v)
 {
  return infinite::typelist<V, void>(v);
 }

template <typename T, typename U, typename V>
 infinite::typelist< V, infinite::typelist<T, U> > operator ,
(infinite::typelist<T, U> const & t, V const & v)
 {
  return infinite::typelist< V, infinite::typelist<T, U> >(v,
infinite::typelist<T, U>(t));
 }


// Usage example:

template <typename T, typename U>
 void foo(infinite::typelist<T, U> const & i)
 {
  cout << __PRETTY_FUNCTION__ << endl;
 }

int main()
{
 foo((infinite::begin, true, (char *) "adasd", 12367, 127.2));
}



My 0,02$

Philippe



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to