I'd define to/from Python conversions for the std::pair, mapping to
Python tuples, then use .add_property().

Alternatively, wrap std::pair the normal way via class_, then you
can use .def_readwrite().

You need to handle each std::pair<A,B> combination of A,B separately,
like any other template class you want to wrap or convert to/from a
Python object.

See also:

http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/faq.html#custom_string

This could be a starting point for std::pair<A,B> conversions. Probably you want
to make it into a converter template if you have more than one combination of 
A,B.
Here is code we use for the to_python conversions:

  http://cci.lbl.gov/cctbx_sources/boost_adaptbx/
    std_pair_conversion.h
    std_pair_ext.cpp

We don't have corresponding from_python conversions.
If you add them, let me know!

The next item in the FAQ is also relevant.



----- Original Message ----
From: Ricardo Abreu <gumb...@gmail.com>
To: cplusplus-sig@python.org
Sent: Monday, January 19, 2009 7:27:46 AM
Subject: [C++-sig]  Exposing members of members

Hello,

Suppose that I have a class A with a member of type std::pair, called a. If I 
want to expose class A to python while allowing read/write access to the object 
pointed to by a.first, what to I put in def_readwrite?

I tried something like class<A>("A").def_readwrite("a", &A::a::first); but it 
doesn't work. Also been trying with boost::bind but didn't have any luck :s

I know I could do getters and setters, but there would be a lot of them because 
my "A" has a lot of members like "a".

Thank you in advance,
Ricardo
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to