[/
 /  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
 /  Copyright (c) 2003-2008 Peter Dimov
 /
 / Distributed under the Boost Software License, Version 1.0. (See
 / accompanying file LICENSE_1_0.txt or copy at
 / http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:examples Examples]

[section Using bind with standard algorithms]

    class image;

    class animation
    {
    public:
        void advance(int ms);
        bool inactive() const;
        void render(image & target) const;
    };

    std::vector<animation> anims;

    template<class C, class P> void erase_if(C & c, P pred)
    {
        c.erase(std::remove_if(c.begin(), c.end(), pred), c.end());
    }

    void update(int ms)
    {
        std::for_each(anims.begin(), anims.end(), boost::bind(&animation::advance, _1, ms));
        erase_if(anims, boost::mem_fn(&animation::inactive));
    }

    void render(image & target)
    {
        std::for_each(anims.begin(), anims.end(), boost::bind(&animation::render, _1, boost::ref(target)));
    }

[endsect]

[section Using bind with Boost.Function]

    class button
    {
    public:
        ``[@boost:/libs/function/index.html `boost::function`]``<void()> onClick;
    };

    class player
    {
    public:
        void play();
        void stop();
    };

    button playButton, stopButton;
    player thePlayer;

    void connect()
    {
        playButton.onClick = boost::bind(&player::play, &thePlayer);
        stopButton.onClick = boost::bind(&player::stop, &thePlayer);
    }

[endsect]

[endsect]
