Boost logo

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