With boost python, how to pass a tuple of lists from python to C++ ? Code attached : line 12 crashes ?! Googling but no fix for now.
Expected results should look like this: >> make; python dummyTest.py g++ -I/usr/include/python2.7 -o dummy.so -shared -fPIC dummy.cpp -lboost_python -lboost_numpy doStuffs nbInt 3 ptrInt ...... ptrInt[0] = 1 ptrInt[1] = 2 ptrInt[2] = 3 nbfloat 3 ptrFloat .... ptrFloat[0] = 1.2 ptrFloat[1] = 2.3 ptrFloat[2] = 3.4 -- Bonne journée, Franck HOUSSEN
#!/usr/bin/env python import numpy as np lsInt = np.array([1, 2, 3], dtype='int32') lsFloat = np.array([1.2, 2.3, 3.4], dtype='float32') t = (lsInt, lsFloat) import dummy dummy.doStuffs(t)
Makefile
Description: Binary data
#include <iostream> #include <boost/python.hpp> #include <boost/python/numpy.hpp> namespace bp = boost::python; namespace np = boost::python::numpy; void doStuffs(boost::python::tuple & t) { std::cout << "doStuffs" << std::endl; np::ndarray lsInt = boost::python::extract<np::ndarray>(t[0]); int nbInt = lsInt.shape(0); std::cout << "nbInt " << nbInt << std::endl; int * ptrInt = reinterpret_cast<int*>(lsInt.get_data()); std::cout << "ptrInt " << ptrInt << std::endl; for(auto k = 0; ptrInt && k < nbInt; k++) {std::cout << "ptrInt[" << k << "] = " << ptrInt[k] << std::endl;}; np::ndarray lsFloat = boost::python::extract<np::ndarray>(t[1]); int nbFloat = lsFloat.shape(0); std::cout << "nbFloat " << nbFloat << std::endl; float * ptrFloat = reinterpret_cast<float*>(lsFloat.get_data()); std::cout << "ptrFloat " << ptrFloat << std::endl; for(auto k = 0; k < nbFloat; k++) {std::cout << "ptrFloat[" << k << "] = " << ptrFloat[k] << std::endl;}; } BOOST_PYTHON_MODULE(dummy) { def("doStuffs", doStuffs); }
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig