On Tue, 2010-01-26 at 13:36 +0100, martin manduch wrote:
> 
> I want to make XVec responsible for memory, which is addressed through
> pointers, but I don't know how.
> 

That would be difficult, especially because you can't really subclass
std::vector in a safe way.

> 
> I need to wrap vector of pointers, because it's parameter in one function...
> 

If it's only used in one function, I'd recommend writing a custom
wrapper for that function that does a manual conversion from a Python
list.  Something like this:

void py_accept_vector(boost::python::list const & sequence) {
    int size = boost::python::len(sequence);
    std::vector<X*> vector(size);
    for (int n = 0; n < size; ++n) {
        boost::python::extract<X*> converter(sequence[n]);
        if (!converter) {
            PyErr_SetString(
                PyExc_TypeError, 
                "Expected sequence of 'X' objects."
            );
            boost::python::throw_error_already_set();
        }
        vector[n] = converter();
    }
    accept_vector(vector); // The passed vector's items are managed
                           // by Python, and cannot be relied upon
                           // to be valid after the function exits.
}

You can then wrap "py_accept_vector" in the usual way:

boost::python::def("accept_vector", py_accept_vector);

Hope that helps!


Jim Bosch

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

Reply via email to