[C++-sig] [pybindgen] references?
Gustavo Carneiro
gjcarneiro at gmail.com
Tue Nov 4 12:05:49 CET 2008
2008/11/3 Stefan Seefeld <seefeld at sympatico.ca>
> Alan Baljeu wrote:
>
>> I just read the tutorial page on pybindgen, but it doesn't talk about
>> reference types. 99% of my C++ code involves passing around things like
>> foo&, so this is significant to me. How is it done?
>>
>>
>
> If you need fine-grained control about argument passing policies (as soon
> as you need reference-semantics, you have to be careful about lifetime
> management, for example), you are better off writing boost.python bindings
> manually, I would suggest.
I know that you're thinking about the custodian_and_ward policy of
boost.python, but pybindgen also supports it. For example:
class SomeObject
{
[...]
Foobar* get_foobar_with_self_as_custodian ();
Foobar* get_foobar_with_other_as_custodian (const SomeObject *other);
void set_foobar_with_self_as_custodian (Foobar *foobar);
};
Is wrapped by pybindgen code:
SomeObject = mod.add_class('SomeObject', allow_subclassing=True)
[...]
SomeObject.add_method('get_foobar_with_self_as_custodian',
retval('Foobar*', custodian=0), [])
SomeObject.add_method('get_foobar_with_other_as_custodian',
retval('Foobar*', custodian=1),
[param('SomeObject*', 'other',
transfer_ownership=False)])
SomeObject.add_method('set_foobar_with_self_as_custodian',
retval('void'),
[param('Foobar*', 'foobar', custodian=0)])
[excerpt from the pybindgen unit tests]
Although I personally dislike this sort of practice; I would hate working
with APIs this complicated even in C++.
--
Gustavo J. A. M. Carneiro
INESC Porto, Telecommunications and Multimedia Unit
"The universe is always one step beyond logic." -- Frank Herbert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20081104/2c9fd07a/attachment.htm>
More information about the Cplusplus-sig
mailing list