Boost logo

Boost Users :

Subject: Re: [Boost-users] [phoenix] - std::for_each - How to call member variable that is a boost::function?
From: Igor R (boost.lists_at_[hidden])
Date: 2013-04-30 13:02:23


> namespace bp = boost::phoenix;
> namespace bpa = bp::arg_names;
>
> struct Foo
> {
> boost::function< void() > callback;
>
> Foo(boost::function< void() > const& callback) :
> callback(callback)
> {
> }
> };
>
> main()
> {
> std::list< Foo > foos;
>
> foos.push_back(Foo(std::cout << bp::val(1) << '\n'));
> foos.push_back(Foo(std::cout << bp::val(2) << '\n'));
> foos.push_back(Foo(std::cout << bp::val(3) << '\n'));
>
> std::for_each(
> foos.begin(),
> foos.end(),
> bp::bind(&Foo::callback, bpa::arg1));
> }
>
> If I wrap the bind(...) in another bind(...) it'll work, but is that the
> right way? I'm not binding anything, I just want the callback called.

FWIW, the following code compiles in MSVC10 with boost 1.53
(basically, your code in form of sscce):

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

namespace bp = boost::phoenix;
 namespace bpa = bp::arg_names;

struct Foo
 {
    boost::function< void() > callback;

   Foo(boost::function< void() > const& callback) :
       callback(callback)
    {
    }
 };

int main()
{
    std::list< Foo > foos;

   foos.push_back(Foo(std::cout << bp::val(1) << '\n'));
    foos.push_back(Foo(std::cout << bp::val(2) << '\n'));
    foos.push_back(Foo(std::cout << bp::val(3) << '\n'));

   std::for_each(
       foos.begin(),
       foos.end(),
      bp::bind(&Foo::callback, bpa::arg1));
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net