|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2003-01-15 00:09:42
"Bruce Lowery <bruce_lowery_at_[hidden]>" <bruce_lowery_at_[hidden]> writes:
> 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.
You can write "thin wrapper functions" which you can expose. For
example:
long string_find(std::string& self, python::str sub, long start, long end)
{
...
}
class_<std::string>("string")
.def("find", string_find)
...
;
You might find it useful to us a first argument of type
python::back_reference<std::string&>. From this class you can get the
std::string object and the Python object which contains it, so, for
example, assuming you had written a __getslice__ method, you could
slice the object itself and search in that:
long string_find(
python::back_reference<std::string&> self
, python::str sub
, long start
, long end)
{
std::string& me = self.get(); // get the string object
object sliced = self.source().slice(start,end);
// do something with sliced.
...
}
But then again, this migh be more complication than you really need.
HTH,
-- David Abrahams dave_at_[hidden] * 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