• Wenzel Jakob's avatar
    Redesigned virtual call mechanism and user-facing syntax (breaking change!) · 86d825f3
    Wenzel Jakob authored
    Sergey Lyskov pointed out that the trampoline mechanism used to override
    virtual methods from within Python caused unnecessary overheads when
    instantiating the original (i.e. non-extended) class.
    
    This commit removes this inefficiency, but some syntax changes were
    needed to achieve this. Projects using this features will need to make a
    few changes:
    
    In particular, the example below shows the old syntax to instantiate a
    class with a trampoline:
    
    class_<TrampolineClass>("MyClass")
        .alias<MyClass>()
        ....
    
    This is what should be used now:
    
    class_<MyClass, std::unique_ptr<MyClass, TrampolineClass>("MyClass")
        ....
    
    Importantly, the trampoline class is now specified as the *third*
    argument to the class_ template, and the alias<..>() call is gone. The
    second argument with the unique pointer is simply the default holder
    type used by pybind11.
    86d825f3
To find the state of this project's repository at the time of any of these versions, check out the tags..
changelog.rst 7.41 KB