[Py++] Help with wrapping setter methods
Please help. I am just a beginner with pyplusplus and am not smart enough to see how to create certain complex rules. How would I create a pyplusplus rule for setting the return policy to "return internal reference" for all member functions that meet the following criteria: * method name begins with "set" * return type is a reference to the parent class or to one of its base classes I would sincerely appreciate an example that could do this. Then perhaps I might be able to figure out how to perform other clever manipulations. Thanks in advance for your help. ################################# struct Foo { // example of the sort of method I mean Foo& setBaz(int baz); // returns reference to self }; ################################# from pyplusplus import module_builder from pyplusplus.module_builder.call_policies import * mb = module_builder(...) # want "something" below... mb.decls(<something?>).call_policies = return_internal_reference() ################################# --Chris Bruns
On Tue, Sep 29, 2009 at 12:44 AM, Christopher Bruns <cmbruns@stanford.edu> wrote:
Please help. I am just a beginner with pyplusplus and am not smart enough to see how to create certain complex rules.
How would I create a pyplusplus rule for setting the return policy to "return internal reference" for all member functions that meet the following criteria: * method name begins with "set" * return type is a reference to the parent class or to one of its base classes
I would sincerely appreciate an example that could do this. Then perhaps I might be able to figure out how to perform other clever manipulations. Thanks in advance for your help.
I suggest you to read the following document: http://language-binding.net/pygccxml/query_interface.html It should clarify few things
################################# struct Foo { // example of the sort of method I mean Foo& setBaz(int baz); // returns reference to self }; ################################# from pyplusplus import module_builder from pyplusplus.module_builder.call_policies import * mb = module_builder(...) # want "something" below... mb.decls(<something?>).call_policies = return_internal_reference() #################################
from pygccxml import declarations def is_my_case( f ): if not f.name.startswith( 'set' ): return False rt = f.return_type if not rt: return False parent_ref = declarations.reference_t( declarations.declarated_t( f.parent ) ) return declarations.is_same( parent_ref, rt ) mb.member_functions(is_my_case).call_policies = return_internal_reference() Untested, but you should get the idea. It is also possible to write this query in more efficient form, but this I will leave to you :-) -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/
participants (2)
-
Christopher Bruns -
Roman Yakovenko