Re: [pygccxml-development] How to manage wrapper classes?
Brought to you by:
mbaas,
roman_yakovenko
From: Matthias B. <ba...@ir...> - 2006-03-26 14:11:22
|
Roman Yakovenko wrote: > Lets skip the rest. Here is what I propouse to you: > http://boost.org/libs/python/doc/v2/faq.html#custom_string Oops, I missed that one! I've just tried it out and it works like a charm. Thanks! Now that this problem is solved there's already the next one which is somewhat related and which, I believe, needs a different solution. In the Maya SDK error handling is done with MStatus objects which carry error information (C++ exceptions are never used). There are two possibilities how a SDK function returns a result object. It either returns a MStatus object as in the following example: MStatus select(MObject& object); or it expects an optional pointer to a MStatus object as input which it uses to set its status information: bool isSelected(MObject& object, MStatus* ReturnStatus=NULL); So far, the Python bindings just work like the C++ version. But what I would actually like to have is that the Python version may raise an exception when an error occurs, no matter if the user provided a MStatus object or not. I suppose in the first case where the function returns a MStatus object I could probably "abuse" a result converter to check for an error instead of converting the value (I haven't tried that out yet). But for the second case I think it requires a wrapper because I need to place code before and after the actual function call, something like: bool isSelected_wrapped(MObject& object, MStatus* ReturnStatus=NULL) { MStatus internalstat; MStatus* finalstat=&internalstat; // If the user provided a MStatus object then use this one... if (ReturnStatus!=NULL) { finalstat = ReturnStatus; } // Call the original function... bool res = isSelected(object, finalstat); // Check for errors... if (exceptions_enabled && finalstat->error()) { throw AnAppropriateException(); } return res; } So how should that be accomplished? (and how can it be guaranteed that the user's wrapper code doesn't interfere with the wrapper code that might already get generated by pyplusplus?) - Matthias - |