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@yahoogroups.com, David Abrahams
"Bruce Lowery
" 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@b... * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution