Использование форсированных виртуальных функций C ++ из Python - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь реплицировать некоторый код C ++ с Python, где python вызывает функции C ++, определенные с boost.

Моя проблема возникает, когда исходный код C ++ относится к виртуальной функции.

виртуальные функции определяются с помощью no_init, например,

 class_<G4VPhysicalVolume, G4VPhysicalVolume*, boost::noncopyable>
     ("G4VPhysicalVolume", "physical volume class", no_init)
     // ---

Если я пытаюсь использовать их из Python, я получаю сообщение об ошибке, что они не могут быть вызваны из Python.

   <type 'exceptions.RuntimeError'>: This class cannot be instantiated from Python

, то есть из-заОпределение no_init, означающее отсутствие конструкторов.

Поэтому мой вопрос заключается в том, как использовать виртуальные функции C ++ из Python.

Я видел https://www.boost.org/doc/libs/1_55_0/libs/python/doc/tutorial/doc/html/python/exposing.html#python.class_virtual_functions

Но, похоже, речь идет о перегрузке виртуальных функций с помощью python.

Boost - версия 1.65.1 Я только что нашел какой-то документ побуст и виртуальные функции, которые ссылаются на 1,55Я не уверен, что изменился способ работы с виртуальными функциями.

Я пытаюсь разработать рабочую среду FreeCAD, и пока FreeCAD находится в процессе миграции на Python 3, используется версия Python, используемая для ежедневного обновления.Версия Python: 2.7.15rc1.

Не уверен, что документация по классам кислорода является последней версией, но G4VPhysicalVolume задокументирован по http://www.apc.univ -paris7.fr / ~ franco / g4doxy / html / classG4VPhysicalVolume.html.Определение буста такое же, как и в моем первоначальном посте.

Предоставить полный и проверяемый пример невозможно, не требуя, чтобы кто-то загружал и собирал из исходного кода как FreeCAD, так и Geant4

.

1 Ответ

0 голосов
/ 03 февраля 2019

Хорошо, я обнаружил, что могу создать физический том с помощью G4PVPlacment.

...