linux user group brescia

immagine del castello

Archivio della mailing list

[LugBS] [Lug BS] Python c++

Giuseppe Corbelli cowo78 a gmail.com
Ven 29 Gen 2010 13:33:29 UTC
2010/1/29 ezio delbono <ezioisio a gmail.com>:
> Ciao, mi servirebbe un aiutino:
> Stavo cercando di scrivere un modulo python in c++; leggendo un po' in giro
> ho visto che ci sono delle librerie che permettono di fare il wrapping delle
> classi, metodi ecc...
> Pensavo di utilizzare la libreria Sip.
> http://www.riverbankcomputing.co.uk/static/Docs/sip4/index.html
>
> Qualcuno ha esperienza in queste cose?? ne sarei molto grato perchè sto
> perdendo parecchio tempo per fare delle semplici cose..qualcosa son riuscito
> a fare girare ma non so come wrappare gli array per esempio!

Personalmente consiglio questo:
http://www.boost.org/doc/libs/1_41_0/libs/python/doc/index.html

Almeno é C++ puro e ti dà la flessibilità necessaria per adattare una
gerarchia di classi arbitraria. Non é comunque banale da imparare.
SIP lo vedo più utile per gerarchie non molto complesse e per task
ripetitivi, ma devo dire che praticamente non lo conosco.

"Wrappare gli array" vuol dire poco. Se vuoi wrappare una tua classe
che deriva da un vector c'é
la vector_indexing_suite.

Se vuoi wrappare un vector semplice C++ -> Python
 bpy::to_python_converter<
    std::vector<std::string>,
    sequence_to_python< std::vector<std::string> >
>();

template<class T>
struct sequence_to_python
{
    static PyObject* convert(const T& p)
    {
        PyObject* retval(PyList_New(p.size()));
        Py_ssize_t pos(0);
        BOOST_FOREACH(const typename T::value_type& v, p) {
            PyList_SetItem(retval, pos,
boost::python::incref(boost::python::object(v).ptr()));
            pos++;
        }
        assert(p.size() == PyList_Size(retval));
        return retval;
    }
};


Il gioco inverso (python list -> C++ vector) é un po' più complesso ma
non é detto che ti serva.

-- 
        Giuseppe "Cowo" Corbelli ~\/~ My software: http://cowo.yoda2000.net
-<! Non c'e' niente da dire in proposito. Tutto quello che uno deve fare e'
  colpire i tasti giusti al momento giusto, e lo strumento suona da solo. !>-
                                J.S. Bach




Maggiori informazioni sulla lista Lug