[C++-sig] return_internal_reference<>()
Ralf W. Grosse-Kunstleve
rwgk at yahoo.com
Fri May 16 18:34:02 CEST 2003
--- Cyril Bonnard <cyril.bonnard at cirad.fr> wrote:
> hi, iam newbie in using boost.python, and i don't understand why the
> following code doesn't work:
>
>
> hello.h:
> ....
> int& geti() { return i; }
> ...
>
>
> hello.cpp:
> ....
> .def("geti", &World::geti, return_internal_reference<>())
> ...
>
>
> i noticed that this works if there is a class (string, inner....)
> instead of int or uchar....
> so waht i done wrong and what shoud be be the right policy to return
> int& or unsigned char&....
I think it doesn't work because integers and strings are immutable in Python.
If you need to modify the integer from Python you will need a setter, along the
lines of
void seti(your_type& o, int new_i)
{
o.geti() = new_i;
}
Then:
.def("seti", seti)
Note that this adds the non-member C++ seti() function as a member function of
the Python type. One of the many cool features of Boost.Python.
I am not sure what the right return value policy is for your geti() function,
but it has to be one which returns a copy.
Ralf
__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com
More information about the Cplusplus-sig
mailing list