我用swig包装了一些c++ api函数。
有一个函数,接口(interface)是f(char * [] strs)。

如何将有效参数传递给此函数。
这就是我所做的。

str = ["str","str2"]
f(str)

它将引发错误
TypeError: in method 'f', argument 1 of type 'char *[]

最佳答案

SWIG不会自动将数组转换为Python列表。由于您使用的是C++,因此请为f使用std::string和std::vector,然后SWIG会自动进行所有必要的转换(不要忘了包括“std_vector.i”,请参见SWIG文档):

void f(std::vector<std::string> > strs)

如果您无法修改f的声明,则可以在.i中创建%inline包装器:
%inline {
    void f(const std::vector<std::string> >& strs)
    {
        // create tmpCharArray of type char*[] from strs
        const char* tmpCharArray[] = new const char* [strs.size()];
        for (i=0; i<strs.size(); i++)
              tmpCharArray[i] = strs[i].c_str();
        f(tmpCharArray);
        delete[] tmpCharArray;
     }
}

关于python - 如何从python中获取char * [],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24524011/

10-13 07:32