Boost logo

Boost :

From: Rodolfo Lima (rodolfo_at_[hidden])
Date: 2003-09-15 13:09:02

> > That's it. I don't know if there's any other way to do it using existing
> > libraries. If there is, please let me know.
> Have you looked at boost/function_output_iterator.hpp?

Yes, I had. The problem is that using make_function_output_iterator you
can't use lambda to make a functor to insert something in a container.
Because in a container there's a template-based overload of insert (the one
that accepts iterators), you can't call the proper insert (the one that
accepts the data to be inserted itself). The compiler (VC7.1) says that I
can't use a function template (the insert that accepts iterators) as a
function argument. At least I don't know if it's possible to select the
proper overload. Using my example and make_function_output_iterator, this
try fails:

sert,&setData,lambda::bind<data>(lambda::constructor<data>(), lambda::_1,

I should do something like the following

class my_inserter_functor
    my_inserter_functor(CONT _cont, FUNC _fn) : cont(_cont), fn(_fn) {};
    void operator()(const int &a)
    CONT &cont;
    FUNC fn;

template<class CONT, class FUNC>
my_inserter_functor<CONT, FUNC> make_my_inserter(CONT &_cont, FUNC _fn)
    return my_inserter_functor<CONT, FUNC>(_cont, _fn);

bda::bind<data>(lambda::constructor<data>(), lambda::_1, 10))));

which is kind of verbose. Since I think all this insert iterator adaptor is
a common problem, it deserves some special attention. My proposal naturally
extends the concept of the function std::inserter to accept a functor that
"mutates" the items as they're being inserted.

Best regards,

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