Переопределение виртуальных методов класса 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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