Me gustaría envolver una función de C++ con el TRAGO que acepta un vector de cadenas STL como un argumento de entrada:TRAGO envoltura C++ para Python: la traducción de una lista de cadenas a un vector de STL de cadenas STL
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void print_function(vector<string> strs) {
for (unsigned int i=0; i < strs.size(); i++)
cout << strs[i] << endl;
}
Quiero terminar con esto en una función de Python disponible en un módulo llamado `mimodelo ':
/*mymod.i*/
%module mymod
%include "typemaps.i"
%include "std_string.i"
%include "std_vector.i"
%{
#include "mymod.hpp"
%}
%include "mymod.hpp"
Cuando construyo esta extensión con
from distutils.core import setup, Extension
setup(name='mymod',
version='0.1.0',
description='test module',
author='Craig',
author_email='balh.org',
packages=['mymod'],
ext_modules=[Extension('mymod._mymod',
['mymod/mymod.i'],
language='c++',
swig_opts=['-c++']),
],
)
y luego importarlo y tratar de ejecutarlo, me sale este error:
Python 2.7.2 (default, Sep 19 2011, 11:18:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymod
>>> mymod.print_function("hello is seymour butts available".split())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: in method 'print_function', argument 1 of type 'std::vector< std::string,std::allocator<std::string> >'
>>>
supongo que esto dice que el TRAGO no proporciona una typemap predeterminado para la traducción entre una lista de cadenas de Python Python y un vector C++ STL de cadenas STL. Siento que esto es algo que podrían proporcionar en algún lugar de manera predeterminada, pero quizás no sé cuál es el archivo correcto para incluir. Entonces, ¿cómo puedo hacer que esto funcione?
¡Gracias de antemano!
he probado con/sin 'using namespace std;' y no había ninguna diferencia. Estoy de acuerdo en que los encabezados deben escribirse sin declaraciones 'using'. Mi preocupación es que el ejemplo que ha vinculado allí es para vectores de primitivos, como ints y dobles; No he podido encontrar nada en línea para envolver el vector, o incluso el vector . –
involucelate
¿Mi edición aborda los otros tipos de vectores? Si no, me falta algo obvio. – Demolishun