Переопределение виртуальных методов класса C++ в Pybind11 с помощью класса батута, но при этом вызов базового метода из C++

Программы на C++. Форум разработчиков
Anonymous
Переопределение виртуальных методов класса C++ в Pybind11 с помощью класса батута, но при этом вызов базового метода из

Сообщение Anonymous »

Я реализую модуль 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

Вернуться в «C++»