[C++-sig] [c++-sig] Making a Python tuple from a Boost.Fusion sequence
Bruno Lalande
bruno.lalande at gmail.com
Fri Feb 27 17:08:38 CET 2009
Hello,
The topic below was opened in the Boost development mailing list,
where it's been pointed out to me that it fits better here.
You can also read the thread archive:
http://thread.gmane.org/gmane.comp.lib.boost.devel/186573
Regards
Bruno
---------- Forwarded message ----------
Hello,
I have written a little function that converts any Boost.Fusion
sequence into a Python tuple (boost::python::tuple). If a sub-sequence
is nested in the sequence, the result will also be a nested tuple (for
instance, boost::make_tuple(0, std::make_pair(1, 2), 3) will give (0,
(1, 2), 3) in Python).
The source code is attached to this mail.
The principle is that any sequence previously adapted to Boost.Fusion
will become a tuple in Python. So, by including the right
boost/fusion/adapted/xxx header, one can convert a pair, a tuple, a
boost::array, and obviously any of the sequences provided by
Boost.Fusion. For example:
#include <boost/python.hpp>
#include <boost/fusion/adapted/std_pair.hpp>
#include <boost/fusion/adapted/boost_tuple.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include "make_tuple_from_fusion_sequence.hpp"
using namespace boost::python;
tuple from_sequence()
{
return make_tuple_from_fusion(
boost::fusion::make_vector(
1,
std::make_pair("first", "second"),
2,
boost::make_tuple('a', 'b', 'c'),
3
)
);
}
BOOST_PYTHON_MODULE(mymodule)
{
def("from_sequence", &from_sequence);
}
In Python we get:
>>> import mymodule
>>> mymodule.from_sequence()
(1, ('first', 'second'), 2, ('a', 'b', 'c'), 3)
Is there any interest in adding this function into Boost.Python? If
yes, I can write the doc and tests, clean the source and maybe improve
the implementation (for example, I feel that I could avoid the use of
m_iteration with a better use of Boost.Fusion...).
Regards
Bruno
-------------- next part --------------
A non-text attachment was scrubbed...
Name: make_tuple_from_fusion.hpp
Type: text/x-c++hdr
Size: 1356 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20090227/0dd51fec/attachment.hpp>
More information about the Cplusplus-sig
mailing list