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::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