Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-12-16 09:26:31

mark_2811_at_[hidden] wrote:
> Hi, I'm new to Boost and am interested in what some of the libraries
> can do to improve my programs. Part of my program involves an Active
> Object that takes calls to methods made in one thread and executes
> them in another. The typical way I've done this in the past is to
> use the Command pattern to write commands onto a message queue that
> the other thread remove from the queue and execute. I'm wondering if
> boost::function can be used to accomplish the same thing with less
> code to write since the Command pattern requires one class for each
> method that is called. Is this a common use for boost::function?
> I'd assume that arguments must be bound using boost::bind? Pretty
> much all of my methods will have arguments that will need to be bound
> when the method is initially called. From my initial read of the
> documentation it seems that the bind library has some limitations
> (call by reference only) so I'm not sure of it's usefulness in this
> scenario?

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

void f(int x)
    std::cout << "f(" << x << ")\n";

void g(double x)
    std::cout << "g(" << x << ")\n";

typedef boost::function< void() > command;

std::list<command> commands;

void producer()
    commands.push_back( boost::bind(f, 1) );
    commands.push_back( boost::bind(g, 2.4) );
    commands.push_back( boost::bind(f, 3) );

void consumer()
    while( !commands.empty() )

int main()

Boost list run by bdawes at, gregod at, cpdaniel at, john at