我有一个像这样定义的函数:
int foo(basic_string<unsigned char>& output);
swig可以将这个没有任何问题“翻译”到python的c ++包装器。 当我从python脚本调用foo时,我总是会收到以下错误:
TypeError: in method 'foo', argument 1 of type 'std::basic_string< unsigned char,std::char_traits< unsigned char >,std::allocator< unsigned char > > &'
我如何定义参数,它适合basic_string参考?
答案 0 :(得分:1)
我在swig界面文件中需要一个typemap:
%typemap(in, numinputs=0) std::basic_string<unsigned char>(std::basic_string<unsigned char> tmp)
{
$1 = &tmp;
}
%typemap(argout) std::basic_string<unsigned char>&
{
if ((!$result) || ($result == Py_None))
{
$result = PyDict_New();
}
PyObject *outValue;
outValue = PyByteArray_FromStringAndSize((const char*)$1->data(), $1->length());
PyDict_SetItemString($result, "$1_name", outValue);
}
之后添加,我的函数返回了basic_string而不是在python中将它作为参数。