我想換用SWIG C++函數,它接受STL串的矢量作爲輸入參數:SWIG包裹C++爲Python:翻譯字符串的列表,以STL字符串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;
}
我想包裝成所謂的'mymod「一個Python可用模塊功能如下:
/*mymod.i*/
%module mymod
%include "typemaps.i"
%include "std_string.i"
%include "std_vector.i"
%{
#include "mymod.hpp"
%}
%include "mymod.hpp"
當我建立這個擴展與
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++']),
],
)
,然後導入並嘗試運行它,我得到這個錯誤:
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> >'
>>>
我猜這是說,呷不爲Python字符串的Python列表和之間的轉換提供了一個默認類型映射一個STL字符串的C++ STL向量。我覺得這是他們默認提供的地方,但也許我不知道要包含哪個文件。那麼我怎麼才能使這個工作?
在此先感謝!
我/嘗試過不'使用命名空間std;',它並沒有區別。我同意頭文件不應該使用''語句來編寫。我擔心的是,你所鏈接的例子是基元的矢量,如整數和雙精度;我在網上找不到包裝矢量,甚至矢量。 –
involucelate
我的編輯是否處理其他矢量類型?如果不是,我錯過了一些明顯的東西 – Demolishun