Boost logo

Boost Users :

Subject: Re: [Boost-users] variadic template function using fusion vector
From: Roman Perepelitsa (roman.perepelitsa_at_[hidden])
Date: 2010-01-13 10:40:31


2010/1/13 noman javed <noman_bwp_at_[hidden]>

> We want to hide from user the creation of the vector. The user just need to
> call the execute function like that execute(FOB,bar1,bar2,...,barn). Where
> the FOB is any function object followed by the original data.

You can do that, but execute must be a function object instead of function.

#include <boost/fusion/functional/adapter/unfused.hpp>

struct execute_impl
{
    template <class Seq>
    struct result
    {
        typedef void type;
    };

    template <class Seq>
    void operator()(Seq const & s) const
    {
        // s contains all arguments passed to execute.
    }
};

boost::fusion::unfused<execute_impl> execute;

int main()
{
    const char* s = "hello";
    int n = 42;
    execute(s, n);
}

Here "execute" suffers from perfect forwarding problem, which you can solve
by using perfect forwarding adaptor. There is one in
p-stade<http://p-stade.sourceforge.net/egg/doc/html/egg/function_adaptors.html#egg.function_adaptors.perfect>and
also I remember seeing one being proposed for boost, but I can't find
it.

Roman Perepelitsa.



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