Hi,

I was wondering the best way to solve this problem:-

void WrapperClass::parse_args(boost::python::list argv)
{
    int argc = boost::python::len(argv);
const char* const* pargv = boost::python::extract<const char* const*>(argv); /// <----
    WrappedClass::parse_args(argc, pargv);
}

This doesn't work unfortunately. (Sorry, that's not very helpful, I know; I can't remember the exact error right now).

I've had a look through boost/python/extract.hpp and frankly have no idea how I'd extend it for this use case, but I have hacked together a rather bloated and repetitive solution that I copy and paste each time I have to do the same thing. e.g.

void WrapperClass::parse_args(const boost::python::list& argv)
{
    int argc = boost::python::len(argv);

    // - Could be a one-liner call to extract<>():-

    const char** pyargv = new const char*[argc+1];
    boost::python::stl_input_iterator<std::string> begin(argv), end;
    int i=0;
    while (begin != end)
    {
        pyargv[i++] = (*begin).c_str();
        begin++;
    }
    pyargv[i] = '\0';
    const char* const* p_argv = &pyargv[0];
    /// ----------

    WrappedClass::parse_args(argc, p_argv);
    delete[] pyargv;
}


This took quite a lot of trial and error to get running correctly, but is there a way to perform this type of extraction already? Could I extend boost::python::extract to do it for me? If so, please could someone show me how I could?

Cheers,
Alex


--
Using Opera's mail client: http://www.opera.com/mail/
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to