Я пытаюсь реплицировать некоторый код 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
.