小编Rob*_*obW的帖子

SWIG C++ Python:通过引用或指针包装int

我正在尝试将一些C++函数包装到Python包装器中.为此,似乎SWIG是一种简单易行的方式.

包装工作,但通过引用或指针传递整数时出现问题.由于Python无法使用引用,因此SWIG在内部将这些转换为指针.

一些简单的示例代码:

Blaat.hpp:

#ifndef __BLAAT_HPP__
#define __BLAAT_HPP
class Blaat
{
public:
 int mA;
 float mB;

public:
 Blaat() {}
 void getA(int & fA);
 void setA(const int fA);
 ~Blaat() {}
};

#endif // __BLAAT_HPP__
Run Code Online (Sandbox Code Playgroud)

Blaat.cpp

#include "Blaat.hpp"
#include <iostream>

void Blaat::getA(int & fA) {
 std::cout << "[Blaat::getA] fA = " << fA << std::endl;
 fA = mA;
} 

void Blaat::setA(const int fA) {
 std::cout << "[Blaat::setA] fA = " << fA << std::endl;
 mA = fA;
}
Run Code Online (Sandbox Code Playgroud)

Blaat.i:

%module Blaat
%{ …
Run Code Online (Sandbox Code Playgroud)

c++ python swig integer reference

9
推荐指数
1
解决办法
9324
查看次数

不允许在Python中修改列表迭代器?

简单的例子:

myList = [1, 2, 3, 4, 5]
for obj in myList:
  obj += 1
print myList
Run Code Online (Sandbox Code Playgroud)

版画

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

而:

myList = [1, 2, 3, 4, 5]
for index in range(0,len(myList)):
  myList[index] += 1
print myList
Run Code Online (Sandbox Code Playgroud)

版画

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

结论:

  1. 可以使用全局列表访问列表来修改列表
  2. 列表项可以来代替使用迭代对象修改

我能找到的所有示例代码都使用全局列表访问器来修改列表.修改列表迭代器是否如此邪恶?

python iterator list

8
推荐指数
3
解决办法
5607
查看次数

标签 统计

python ×2

c++ ×1

integer ×1

iterator ×1

list ×1

reference ×1

swig ×1