<div dir="ltr"><div><div><div><div><div>Genial!! Muchas gracias a los dos!!<br><br></div></div>El punto más importante es que el estándar C++ solo se refiere a la API, en este caso de la STL. Y respecto a la ABI no dice nada, de tal forma que cada compilador puede implementar los tipos de la STL como le de la gana. Incluso la implementación de gcc puede cambiar en otra plataforma.<br></div>Es decir, <a href="https://metacpan.org/pod/FFI::Platypus">FFI::Platypus</a> puede tener problemas ya que trabaja a nivel binario, y como bien decía Salva en la reunión anterior, necesitamos conocer los tipos (tamaño, estructura, ...).<br><br>En mi caso, toda la comunicación entre C++ y perl la hago gracias a <a href="https://metacpan.org/pod/ExtUtils::XSpp">ExtUtils::XSpp</a><br>Este módulo extiende el concepto de los typemaps de XS para utilizarlos con XSpp.<br><br></div>Si quereis ver un ejemplo con <a href="https://metacpan.org/pod/ExtUtils::XSpp">ExtUtils::XSpp</a> en el directorio examples de la presentación hice un ejemplo mínimo: <a href="https://bitbucket.org/pablorodriguez/slidesperlinteroperability/src/7ef0f4f8a53e/examples/XSpp/Cpp/?at=master">MinimalXSpp</a> (Copiare un poco a Salva lo subire a CPAN ;)<br></div>Además Steffen Mueller facilitó la interacción con la STL añadiendo el módulo:<a href="https://metacpan.org/pod/ExtUtils::Typemaps::STL">ExtUtils::Typemaps::STL</a> que forma parte de <span id="goog_1532156202"></span><span id="goog_1532156203"></span><a href="https://metacpan.org/pod/ExtUtils::Typemaps::Default">ExtUtils::Typemaps::Default</a><br><div><div>Estos módulos añaden los typemaps de los tipos más habituales de la STL, incluyendo std::string via: <a href="https://metacpan.org/pod/ExtUtils::Typemaps::STL::String">ExtUtils::Typemaps::STL::String</a><br><br></div><div>En unas cuantas ocasiones he tenido que intercomunicar C++ y Perl para diversos proyectos, y tengo una colección de typemaps que estoy poniendo en orden y limpiando para que puedan ser utilizados en XSpp igual de bien que con <a href="https://metacpan.org/pod/ExtUtils::Typemaps::Default">ExtUtils::Typemaps::Default</a>. Incluyendo typemaps para las extensiones C++11 de la STL, un poco de combinatoria (tipo vector<vector<double>>) e incluso tipos de la <a href="http://www.boost.org/">Boost</a><br></div><div>Si os interesa podeis seguir aquí el desarrollo: <a href="https://github.com/pablrod/p5-ExtUtil-Typemaps-STL-Extra">https://github.com/pablrod/p5-ExtUtil-Typemaps-STL-Extra</a> (todavía no está en CPAN...)<br></div><div><br><br><br><br></div><div><br><div><br><br><div><br><br></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 11 de abril de 2016, 12:02, salvador fandino <span dir="ltr"><<a href="mailto:sfandino@gmail.com" target="_blank">sfandino@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>He creado un pequeño módulo que muestra como hacer un wrapper de una función que toma y devuelve std::string en XS.<br><br>  <a href="https://github.com/salva/p5-Acme-WrappingTheSTLFromXS" target="_blank">https://github.com/salva/p5-Acme-WrappingTheSTLFromXS</a><br><br></div><div>El código XS queda muy simple:<br><br>  <a href="https://github.com/salva/p5-Acme-WrappingTheSTLFromXS/blob/master/WrappingTheSTLFromXS.xs" target="_blank">https://github.com/salva/p5-Acme-WrappingTheSTLFromXS/blob/master/WrappingTheSTLFromXS.xs</a><br></div><div><br></div>El truco en realidad está en los typemaps, que son fragmentos de código donde se define como convertir los datos entre los tipos de C/C++ y las estructuras de datos usadas internamente por Perl:<br><br>  <a href="https://github.com/salva/p5-Acme-WrappingTheSTLFromXS/blob/master/typemap" target="_blank">https://github.com/salva/p5-Acme-WrappingTheSTLFromXS/blob/master/typemap</a><br><br>En mi opinión, los typemaps son una de los puntos clave para conseguir 
que el código XS no se complique.<br></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">2016-04-03 22:28 GMT+02:00 Pablo Rodriguez <span dir="ltr"><<a href="mailto:pablo.rodriguez.gonzalez@gmail.com" target="_blank">pablo.rodriguez.gonzalez@gmail.com</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div><div><div><div><div>Hola<br><br></div>En la reunión del otro día comente que no había conseguido que funcionara FFI::Platypus con funciones con tipos de la STL en C++, ni siquiera con el más básico: std::string.<br><br></div>Joaquin apuntó a un parrafo en la documentación: <a href="https://metacpan.org/pod/FFI::Platypus::Lang::CPP#the-standard-C-library" target="_blank">https://metacpan.org/pod/FFI::Platypus::Lang::CPP#the-standard-C-library</a> <br><br></div>Tampoco he conseguido hacerlo funcionar.<br><br></div>¿Alguien más se anima a probar?<br><br></div><div>El código básico para probarlo está en el repo con las transparencias: <a href="https://bitbucket.org/pablorodriguez/slidesperlinteroperability/src/7ef0f4f8a53e0bbd8d28ea01e10e0d37ddbd0a50/examples/Platypus/Cpp/?at=master" target="_blank">https://bitbucket.org/pablorodriguez/slidesperlinteroperability/src/7ef0f4f8a53e0bbd8d28ea01e10e0d37ddbd0a50/examples/Platypus/Cpp/?at=master</a><br></div><div><br></div>Un saludo<br></div>
<br></div></div><span class="">_______________________________________________<br>
Madrid-pm mailing list<br>
<a href="mailto:Madrid-pm@pm.org" target="_blank">Madrid-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/madrid-pm" rel="noreferrer" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br></span></blockquote></div><br></div>
<br>_______________________________________________<br>
Madrid-pm mailing list<br>
<a href="mailto:Madrid-pm@pm.org">Madrid-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/madrid-pm" rel="noreferrer" target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br></blockquote></div><br></div>