|
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