如何在python中通过swig使用basic_string <unsigned char =“”>?

时间:2016-02-02 10:35:19

标签: swig

我有一个像这样定义的函数:

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参考?

1 个答案:

答案 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中将它作为参数。