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