[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