[C++-sig] [c++-sig] Making a Python tuple from a Boost.Fusion sequence

Luca Secchi rancas at gmail.com
Wed Mar 11 17:06:00 CET 2009


It seems very useful to me.
By the way, is there a simple way to iterate through a fusion sequence or
transformation of it with a python iterator?

Luca.

2009/2/27 Bruno Lalande <bruno.lalande at gmail.com>

> 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
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>



-- 
Ing. Luca Secchi
Ass.to Turismo, Artigianato e Commercio
Servizio amministrativo e legale, del bilancio e degli affari generali
tel. interno  4312
tel. esterno 070/606 4312
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20090311/2db081d9/attachment.htm>


More information about the Cplusplus-sig mailing list