Переопределение виртуальных методов класса C ++ в Pybind11 с классом батута - но все же вызов базового метода из C ++Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Переопределение виртуальных методов класса C ++ в Pybind11 с классом батута - но все же вызов базового метода из C ++

Сообщение Anonymous »

Я внедряю модуль Pybind11, и я выставляю класс C ++ на Python, что он должен быть подкрас. Я следую тому, что здесь описано (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 
Ниже я выставляю класс на Python: < /p>
py::class_(m, "CollisionResponse")
.def(py::init())
.def("onStart", &CollisionResponse::onStart);
Теперь у меня есть объект C ++, который содержит карту CollisionResponse объектов, которые передаются из Python через метод AddResponse :

Код: Выделить всё

class CollisionEngine:
...
void addResponse(std::shared_ptr response) {
_response.insert({std::make_pair(response->getTag1(), response->getTag2()), response});

}

std::unordered_map _response;

< /code>
Последнее, но не менее важное - код Python: < /p>
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 МБ.

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

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