|
Boost : |
From: Carlos Rafael Giani (e0325834_at_[hidden])
Date: 2008-03-16 08:50:17
Hi,
I want to store boost signals in fusion sequences. This does not work
directly, since signals are noncopyable. I figured I could use
shared_ptr's of the signals, and all that needs to be done is to iterate
through the sequences, instantiate objects, and assign them to the
shared_ptr's.
These are the structures for the signals:
template < typename Element >
struct element_signals
{
typedef boost::signal < void(model const &, Element const &) >
event_signal_t;
typedef boost::signal < void(model const &, Element const &,
std::vector < std::string > const &) > modified_signal_t;
typedef boost::fusion::vector <
std::tr1::shared_ptr < event_signal_t >, // add
std::tr1::shared_ptr < event_signal_t >, // remove
std::tr1::shared_ptr < modified_signal_t > // modified
> signals_t;
typedef boost::fusion::pair < Element, signals_t > signals_pair_t;
};
typedef boost::fusion::map <
element_signals < vertex_iterator > ::signals_pair_t,
element_signals < edge_iterator > ::signals_pair_t
> signals_t;
Now, I am trying to do something like this pseudo-code:
signals_t signals;
for_each(signals,
for_each(_1,
_1 = typeof(_1)(new typeof(_1)::element_type)
)
);
Problems:
1) How do I get the type of the current element in the for_each loop
without resorting to functors?
2) I tried to use a MPL placeholder for the _1 in the outer for_each
loop, but it didn't seem to work. Does Fusion have its own placeholders,
or what am I missing?
Regards,
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk