Boost logo

Boost Users :

From: Bruce Lowery bruce_lowery_at_[hidden])
Date: 2003-01-13 15:38:20


Could you briefly map out how to expose the std::string methods so
that the wrapper looks like a python string?

In my test program, I defined a simple 'class_' as you suggested:

     class_<std::string>("string")
     ;

However, I don't understand how to properly expose the std::string
methods since the python string method arguments are not mirrors of
those in std::string class.

For instance, at this point, I could only naively try to define
a 'find(sub,first,last)' method in the class_<std::string> wrapper,
in terms of a std:string method, say 'std::string( const char *s,
size_type i, size_type n)':

     class_<std::string>("string")
     .def( "find", &std::string::find )
     ;

I don't expect this to compile, much less execute with expected
results.

I realize this may be a "newbie" (which I am) question. I have been
scanning the extensive documentation, but it's not yet coming
together in my head.

--bruce

--- In Boost-Users_at_[hidden], David Abrahams <dave_at_b...> wrote:
> "Bruce Lowery <bruce_lowery_at_y...>" <bruce_lowery_at_y...> writes:
>
> > I have a simple C++ class that I've wrapped using Boost/Python,
> > v1.29.0 (on Win 2K), and that has a simple accessor returning a
const
> > ref to an internal string. In the python interpreter, the
accessor
> > raises an exception (see below),whereas another access that
returns a
> > copy of the string works. Could someone explain my mistake?
>
> C++ strings are exposed to Python as Python strings by default.
>
> return_internal_reference<> builds a Python object around a pointer
to
> the C++ result object (which must have a class_<> wrapper somewhere)
q,
> and applies some lifetime management to keep the "self" object alive
> as long as the Python result is alive. If you want it to work, you
> could write class_<std::string>("string")... to create a std::string
> wrapper. I'm not sure you'd be getting the result you want, though:
> it wouldn't be a Python string. You could expose enough of
> std::string's operators to make it look like a Python string, of
> course.
>
>
> --
> David Abrahams
> dave_at_b... * http://www.boost-consulting.com
> Boost support, enhancements, training, and commercial distribution


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net