[C++-sig] Magic boost conversion unicorn hook?

Ken Seehart (kseehart) [CONT - Type 2] kseehart at micron.com
Fri Sep 25 00:36:02 CEST 2015


I have a python class that wraps a boost.python object. I am using a boost.python library function that requires the raw boost.python object. I want to be able to pass the python object to the boost api function.

Is there a hook available on the python side that instructs boost to perform a conversion?

Hypothetically, it would be something like this:

class EggWrapper(object):
    def __init__(self, egg):
        object.__setattr__(self, '_egg', egg)

    def __getattribute__(self, name):
        egg = object.__getattribute__(self, '_egg')

        if name=='_egg':
            return egg

        if name in EggWrapper.__dict__:
            return object.__getattribute__(self, name)

        return getattr(egg, name)

    def __setattr__(self, name, value):
        egg = object.__getattribute__(self, '_egg')
        setattr(egg, name, value)

    def magic_boost_conversion_unicorn_hook(self):
        'this is automatically called by boost to convert arguments'
        egg = object.__getattribute__(self, '_egg')
        return egg


import myboostlib

egg = EggWrapper(myboostlib.getEgg())

myboostlib.spam(egg)


Where the signature for spam is: spam(class boost::python::api::object)
And myboostlib.getEgg() returns a boost::python::api::object

- I do not have the ability to modify the library or any C/C++ code, the solution must be entirely on the python side.

- I can't change the calling convention. The wrapped object must be used (i.e. I can't just say myboostlib.spam(egg._egg), though that is the desired result). So the solution should be incorporated into the EggWrapper class.

- I'm only interested in solutions that reflect expert knowledge of Boost.Python, since I believe I have already considered all the trivial solutions.

So my question is, does magic_boost_conversion_unicorn_hook() exist, and if so, how is it spelled?


Thanks,
Ken

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20150924/f172e130/attachment.html>


More information about the Cplusplus-sig mailing list