Skip to content

[QUESTION] Implements a pure virtual class in python calls pure virtual function #2844

Open
@jjcasmar

Description

@jjcasmar

I am trying to implement a virtual class i have in C++ using Python. To do that, I am using the trampoline as described in pybind documentation. The issue here is that in python, I need to keep the python object around or I would have a pure virtual function call error.

My python class looks like this

class BlendingField(PyVNCS.Sim2D.BlendingField):
    def __init__(self):
        PyVNCS.Sim2D.BlendingField.__init__(self)

    def blending(self, point):
        return 0.5

And I have to use like this

blendingField = BlendingField()
simCreator.blendingField = blendingField

simCreator.create()

Basically, I create the BlendingField with the python implementation, I assign it to simCreator.blendingField property and I call simCreator.create(), which is a C++ function using the blending field.

If instead of doing it like that, I do it like this

simCreator.blendingField = BlendingField()

simCreator.create()

I get a crash when trying to use the blending field from C++. This happens because the python object is destroyed.

Is this the expected behavior? I find it kind of confusing and it needs an extra line which most of the times you dont really want.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions