mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-30 00:47:12 +00:00
86d825f330
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.
21 lines
619 B
Plaintext
21 lines
619 B
Plaintext
const char *
|
|
c
|
|
Failed as expected: Tried to call pure virtual function "Base::dispatch"
|
|
Yay..
|
|
[Placeholder[1], Placeholder[2], Placeholder[3], Placeholder[4]]
|
|
[3, 5, 7, 9, 11, 13, 15]
|
|
0==0, 1==1, 2==2, 3==3, 4==4, 5==5, 6==6, 7==7, 8==8, 9==9,
|
|
Failed as expected: Incompatible function arguments. The following argument types are supported:
|
|
1. (example.issues.ElementA) -> NoneType
|
|
Invoked with: None
|
|
Failed as expected: Incompatible function arguments. The following argument types are supported:
|
|
1. (int) -> int
|
|
Invoked with: 5.2
|
|
12.0
|
|
C++ version
|
|
A.f()
|
|
Python version
|
|
PyA.PyA()
|
|
PyA.f()
|
|
In python f()
|