Python 是否用SWIG覆盖字符(或std::字符串)数组位置?
我能够用C/C++编写一个void函数,并使用SWIGPython 是否用SWIG覆盖字符(或std::字符串)数组位置?,python,arrays,numpy,char,swig,Python,Arrays,Numpy,Char,Swig,我能够用C/C++编写一个void函数,并使用SWIG(int*INPLACE\u ARRAY1,int DIM1)包装到Python/Numpy,该函数接收一个int*vector作为参数,对该向量进行一些计算,并覆盖同一向量上的结果,该结果在Python对象内部可用。具体如下: extern "C" void soma_aloc(int* vetor, int tamanho) { int m = 0; int* ponteiro = new in
(int*INPLACE\u ARRAY1,int DIM1)
包装到Python/Numpy,该函数接收一个int*vector
作为参数,对该向量进行一些计算,并覆盖同一向量上的结果,该结果在Python对象内部可用。具体如下:
extern "C" void soma_aloc(int* vetor, int tamanho)
{
int m = 0;
int* ponteiro = new int[tamanho];
for(m = 0; m < tamanho; m++)
{
ponteiro[m] = vetor[m];
};
for(m = 0; m < tamanho; m++)
{
ponteiro[m] = ponteiro[m] * 10;
};
for(m = 0; m < tamanho; m++)
{
vetor[m] = ponteiro[m];
};
delete [] ponteiro;
};
我几乎没有游泳的经验。可以使用char*
、char**
和/或std::string*/std::string**
?提前谢谢 使用标准::向量:
void vetor_char2D(std::vector<std::string>& vetorchar)
{
for (int i = 0; i < vetorchar.size(); i++)
vetorchar[i] = "b";
};
void vetor_char2D(标准::vector&vetorchar)
{
对于(int i=0;i
这清楚地表明向量可以修改,其中的字符串可以修改,STL向量和字符串的SWIG类型映射将很好地工作。注意字符串的双引号而不是单引号;Python只有字符串,没有字符,所以这无关紧要。你也可以让它与char*等一起工作,但它很少值得付出努力,更容易使用。如果不想更改源代码,可以通过%inline指令将上述内容作为包装器包含在.i文件中
注意,您不需要外部C限定符。你应该使用
#include
而不是string.h.谢谢你,伙计!现在它开始工作了!我正在与此模板一起使用。I文件:%template(IntVector)std::vector;%模板(双向量)std::vector;%模板(StringVector)std::vector;%模板(ConstCharVector)std::vector;在Python内部,我使用(模块名称).StringVector(长度)构建适当的对象。问题:我需要在Python中释放这些向量吗?@eldiegon不,你不需要,因为swig复制两层之间的字符串,没有mem需要管理。@eldiegon很棒。请注意,感谢他人的方法是投票选出您认为有用的答案和评论,并标记最有用/正确/有用的答案(选中标记)。
void vetor_char2D(std::vector<std::string>& vetorchar)
{
for (int i = 0; i < vetorchar.size(); i++)
vetorchar[i] = "b";
};