Hi,
I have a plain C++ class which I want
to exposed to python. The pyhton object accesses the C++ class via
smart pointer.
class
Sensor
: public
boost::enable_shared_from_this<Sensor>
{
public:
Sensor(int
port);
~Sensor()
void
Open();
void
SendCommand(const
std::string&
command);
void
Close();
private:
int
_port;
};
auto
sensorClassTypeObject = boost::python::class_<Sensor,
boost::shared_ptr<Sensor>>("Sensor",
boost::python::init<int>())
.def("Open",
&Sensor::Open)
.def("SendCommand",
&Sensor::SendCommand)
.def("Close",
&Sensor::Close);
The question is: if I already have one
instance of the C++ class (in a dependency injection container) then how
can I create in the C++ part an instance of the python wrapper so that
it does not create a new instance of Sensor, but uses my existing
Sensor instance? Then I would put this instance into one of the python
modules (this part would be made in C++) inside the python interpreter
to be able to access it via script.
Something like that:
shared_ptr<Sensor> sensorInstance
= DIContainer.Resolve<Sensor>();
boost::object pythonInstance = sensorClassTypeObject(sensorInstance);
pythonInterpreterWrapper.AddToModule("__main__",
pythonInstance);
Best Regards,
Tamas