Я реализую модуль Pybind11 и предоставляю Python класс C++, который должен быть подклассом. Я следую тому, что описано здесь (
https://pybind11.readthedocs.io/en/stab ... asses.html), а ниже приведен код базового C++ и класса батута.
Код: Выделить всё
class CollisionResponse {
public:
CollisionResponse() : _tag1(0), _tag2(1) {}
virtual ~CollisionResponse() = default;
virtual void onStart() const {
std::cout getTag1(), response->getTag2()), response});
}
std::unordered_map _response;
И последнее, но не менее важное — это код Python:
Код: Выделить всё
class TestCollision(example.CollisionResponse):
def onStart(self):
print('derived class')
...
cr = CollisionResponse()
cr.addResponse(TestCollision())
Теперь в классе CollisionEngine у меня есть метод, который вызывает метод onStart из объектов CollisionResponse, хранящихся в _response . Однако, что бы ни случилось, базовая реализация всегда вызывается. При отладке я вижу, что вызывается PyCollisionResponse::onStart, но затем выполнение происходит внутри CollisionResponse::onStart, а не в Python TestCollision.onStart.
Мне очень трудно понять, в чем дело!
Подробнее здесь:
https://stackoverflow.com/questions/791 ... ss-but-sti