[C++-sig] std::vector

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Wed Oct 2 23:37:17 CEST 2002


--- David Abrahams <dave at boost-consulting.com> wrote:
> Hi Scott,
> 
> I think Ralf Grosse-Kunstleve is probably the one to answer your questions.
> He's the one who implemented the import/export stuff for Boost.Python v1,
> and has the most expertise in translating containers. He also has
> implemented a much better mechanism for Boost.Python v2. He's been
> travelling, but IIUC he might be able to get back to you by the end of the
> week.

I could dig out some old stuff that I used with Boost.Python v1, but I highly
recommend using Boost.Python v2. Is that a possibility?
Ralf

> ----- Original Message -----
> From: "Scott A. Smith" <ssmith at magnet.fsu.edu>
> To: <c++-sig at python.org>
> Sent: Wednesday, October 02, 2002 10:02 AM
> Subject: [C++-sig] std::vector
> 
> 
> > Hello,
> >
> > I have been reading the documentation on dealing with std::vector<> in
> > Boost.Python, http://www.boost.org/libs/python/doc/cross_module.html, and
> > this is exactly what I need for both vectors of built-in types and those
> > using my own classes. I have used the class builder to expose such a
> vector
> > as a Python object and now need to be able to go back and export some C++
> > functions that use them as arguments or as a return type.
> >
> > Is there a module already in Boost.Python that has "std_vector"? I cannot
> > find anything on it and the html page above only supposes that one had
> such
> > a module. I think it would help me out quite a bit if I could play with
> some
> > vector<int> functions to try out what is suggested. Even more, if some of
> > this is already in Boost.Python I would surely like to use it rather than
> > begin doing so for all the class types I am using with std::vector.
> >
> > For example, I have this to expose my std::vector<std::string>:
> >
> >     boost::python::class_builder<std::vector<std::string> >
> > Vstring(PyModule, "Vstring");
> >     Vstring.def(boost::python::constructor<>());
> >     Vstring.def(Vstring_push_back, "push_back");
> >
> > and this allows me to make objects of Vstring in Python just fine. The
> > push_back stuff is done as shown in the comprehensive test. Now, how do I
> > get
> >
> > VS = Vstring()
> > VS = MyFunctionReturningStdVectorOfStrings()
> > MyFunctionUsingStdVectorOfStrings(VS)
> >
> > by exporting C++ functions that are something like
> >
> > std::vector<std::string> MyFunctionReturningStdVectorOfStrings();
> > void MyFunctionUsingStdVectorOfStrings(std::vector<std::string>);
> >
> > to work in Python. Do I need import_converters/export_converters? Do I
> need
> > them even when everything is in the same module? Neither the
> "vector_double"
> > nor "string_map" in the comprehensive test show this and AFAIK the test
> does
> > have any code where C++ functions using and returning std::vector<double>
> > are exported and making use of vector_double.
> >
> > Is there other documentation on this, or perhaps a place where I can
> easily
> > search for such info?
> >
> > Thanks,
> > Scott
> >
> >
> >  =======================================
> >  Dr. Scott A. Smith
> >  Associate in Research
> >  National High Magnetic Field Laboratory
> >  1800 East Paul Dirac Drive
> >  Tallahassee, FL 32310
> >
> >  phone: (850) 644-6348
> >  FAX:   (850) 644-1366
> >  email: ssmith at magnet.fsu.edu
> >  http://www.magnet.fsu.edu
> >  http://gamma.magnet.fsu.edu
> >
> >
> >
> > > -----Original Message-----
> > > From: c++-sig-admin at python.org [mailto:c++-sig-admin at python.org]On
> > > Behalf Of David Abrahams
> > > Sent: Wednesday, October 02, 2002 8:05 AM
> > > To: c++-sig at python.org
> > > Subject: Re: [C++-sig] Pointer manipulation Boost.Python - C++
> > >
> > >
> > > I'm going to answer this in terms of Boost.Python v2, since v1 is now
> > > retired and won't be in the upcoming release.
> > >
> > > From: "Mathieu Tremblay" <mtremblay at golemlabs.com>
> > >
> > >
> > > > Hello,
> > > > I am taking a look at Boost.Python and I wonder if it is possible
> > > > to convert pointers to existing classes to PyObjects* and then be
> > > > able to pass an existing instance of an object directly to and from
> > > > python:
> > >
> > > It is.
> > >
> > > >  Example:
> > > >   In C++ I create a CWheel and I set its member m_diameter to 1233.
> In
> > > >  python I have a function that receives a CWheel and displays the
> > > >  diameter (Lets suppose that Python knows the CWheel from
> Boost.Python
> > > > :-) )
> > > >              Ex : def printCWheelDiam(awheel):
> > > >                          print awheel.m_diameter
> > > >
> > > >              What I would like to do Is to create the CWheel in C++,
> > > >  pass its pointer to python so it can manipulate
> > > >  it (and see that its diameter is 1233)  and then return a
> > > >  CWheel that I could map from a PyObject to a CWheel in C++.
> > >
> > > The safest thing to do is to create the CWheel by invoking its class
> > > wrapper:
> > >
> > >     // Declare the CWheel extension class
> > >     object wheel_class =
> > >         class_<CWheel>("CWheel")
> > >             .def_readonly("m_diameter", &CWheel::m_diameter)
> > >             .def("some_member_function", &CWheel::some_member_function)
> > >             ...
> > >             ;
> > >
> > >     object wheel_obj = wheel_class(); // construct one
> > >
> > > Now you can pass wheel_obj back to python, and all reference counts are
> > > nicely managed. You don't need to "map" anything between C++ and
> Python;
> > > the library takes care of that for you.
> > >
> > > If you really want to pass pointers around, it's certainly
> > > possible to tell
> > > the library to build a Python object around the pointer, but then you
> need
> > > to make sure the lifetime of the C++ object being referenced by
> > > the pointer
> > > extends past the lifetime of all Python references to the object or
> your
> > > program will crash.
> > >
> > >
> > > -----------------------------------------------------------
> > >            David Abrahams * Boost Consulting
> > > dave at boost-consulting.com * http://www.boost-consulting.com
> > >
> > >
> > >
> > > _______________________________________________
> > > C++-sig mailing list
> > > C++-sig at python.org
> > > http://mail.python.org/mailman/listinfo/c++-sig
> > >
> >
> >
> > _______________________________________________
> > C++-sig mailing list
> > C++-sig at python.org
> > http://mail.python.org/mailman/listinfo/c++-sig
> >
> 
> 
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig


__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com




More information about the Cplusplus-sig mailing list