Tôi muốn quấn một ++ chức năng C với SWIG mà chấp nhận một vector của chuỗi STL như một tham số đầu vào:SWIG gói C++ cho Python: dịch một danh sách các chuỗi để một vector STL của chuỗi 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;
}
tôi muốn quấn này vào một hàm Python có sẵn trong một module gọi là 'mymod':
/*mymod.i*/
%module mymod
%include "typemaps.i"
%include "std_string.i"
%include "std_vector.i"
%{
#include "mymod.hpp"
%}
%include "mymod.hpp"
Khi tôi xây dựng mở rộng này với
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++']),
],
)
và sau đó nhập nó và cố gắng chạy nó, tôi nhận được lỗi này:
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> >'
>>>
Tôi đoán này được nói rằng SWIG không cung cấp một typemap mặc định cho dịch giữa một danh sách Python của chuỗi Python và một vector C++ STL của chuỗi STL. Tôi cảm thấy như thế này là một cái gì đó họ có thể cung cấp một nơi nào đó theo mặc định, nhưng có lẽ tôi không biết đúng tập tin để bao gồm. Vậy làm cách nào tôi có thể làm việc này?
Cảm ơn trước!
Tôi đã thử nó có/không có 'using namespace std; 'và nó làm cho không có sự khác biệt. Tôi đồng ý rằng các tiêu đề nên được viết mà không có câu lệnh 'using'. Mối quan tâm của tôi là ví dụ bạn đã liên kết ở đó là cho các vectơ nguyên thủy, như ints và double; Tôi đã có thể tìm thấy không có gì trực tuyến cho gói vector, hoặc thậm chí vector . –
involucelate
Tôi có chỉnh sửa địa chỉ các loại véc tơ khác không? Nếu không, tôi thiếu một cái gì đó hiển nhiên. – Demolishun