On 05/12/2012 12:22 PM, DarkAnt wrote:
I'm trying to create a boost::python::dict that stores another
boost::python::dict.

int main()
{
        Py_Initialize();
        boost::python::dict parent;
        try{
                parent["child_dict"] =
boost::make_shared<boost::python::dict>(boost::python::dict());
        }
        catch(...){
                PyErr_Print();
        }
        return 0;
}

TypeError: No to_python (by-value) converter found for C++ type: class
boost::shared_ptr<class boost::python::dict>

I was under the impression that boost::shared_ptr had special
treatment in boost::python(that is the library already knew what to do
with it). I'm not quite sure if I'm supposed to write this to_python
converter or if I'm supposed to achieve this in a different manner. If
I do write the to_python converter what's the method of keeping track
of both reference counts?

There's no need to use shared_ptr on Python objects; those will be tracked using Python's own reference counting system.

Just doing

parent["child_dict"] = boost::python::dict();

will do what you want.

Note that boost::python::dict (as well as boost::python::object, etc.) is actually a smart pointer itself, holding a PyObject* and incrementing/decrementing the reference count in the C++ copy constructor, assignment operator, and destructor.

HTH!

Jim
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to