Somewhere in the E.U., le 31/01/2003

   Bonjour

      Given my recent (and now solved, thanks!) problems with the 
Boost.Test framework and bind, I felt I needed some exercice. As I 
believe this may be of interest to others, and do not know where to put 
it where it can be found (perhaps included in bind's doc?), I will 
reproduce it below (hoping this will not be a waste of bandwidth).

   Encore merci!

HH

 -- 8>< ------------------------------------ ><8 -- 
// A simple exercice using funtional, function and bind...


#include <iostream>

#include <functional>


#include <boost/bind.hpp>
#include <boost/function.hpp>


void  eater(::boost::function0<void> const & snack)
{

   ::std::cout << "Eating a ";
   
   snack();
}


void  f()
{
   ::std::cout << "function of no parameters." << ::std::endl;
}


void  fn(int)
{
   ::std::cout << "normal function of one parameter." << ::std::endl;
}


template<typename T>
void  ft(int)
{
   ::std::cout << "templated function of one parameter." << ::std::endl;
}


class A
{
public:

      A(char const * blurb)
   :  wit(blurb)
   {
   }
   
   void  operator ()() const
   {
      ::std::cout << "member function of no parameters of "
               << wit << "." << ::std::endl;
   }
   
   ::std::string  wit;
};


class AN
{
public:

      AN(char const * blurb)
   :  wit(blurb)
   {
   }
   
   void  operator ()(int) const
   {
      ::std::cout << "member function of one parameter of "
               << wit << " (normal)." << ::std::endl;
   }
   
   ::std::string  wit;
};


template<typename T>
class AT
{
public:

      AT(char const * blurb)
   :  wit(blurb)
   {
   }
   
   void  operator ()(int) const
   {
      ::std::cout << "member function of one parameter of "
               << wit << " (templated)." << ::std::endl;
   }
   
   ::std::string  wit;
};


int      main(int argc, char * argv[])
{
   eater(&f);
   eater(::boost::bind(&fn, 1));
   eater(::boost::bind(static_cast< void (*) (int) >(&ft<int>), 1));
   
   A     a("a named instance of a class");
   
   eater(::boost::bind(std::mem_fun_ref(&(A::operator ())), a));
   eater(::boost::bind(std::mem_fun_ref(&(A::operator ())), A("an 
anonymous instance of a class")));
   
   AN    an("a named instance of a class");
   
   eater(::boost::bind(std::mem_fun_ref(&(AN::operator ())), an, 1));
   eater(::boost::bind(std::mem_fun_ref(&(AN::operator ())), AN("an 
anonymous instance of a class"), 1));
   
   AT<int>  at("a named instance of a class");
   
   eater(::boost::bind(std::mem_fun_ref(&(AT<int>::operator ())), at, 
1));
   eater(::boost::bind(std::mem_fun_ref(&(AT<int>::operator ())), 
AT<int>("an anonymous instance of a class"), 1));
}

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

Reply via email to