http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf
它来自上面的链接:

python - Swig 工具和 C++。太聪明了-LMLPHP

我知道这是一本旧出版物,因此信息可能已经过时。

我想问一下:

“如果你不太聪明,似乎可以很好地使用 C++”
太聪明是什么意思?

在使用 swig 工具编写 C++ 模块和扩展 Python 时,是否有已知的情况/案例我应该非常小心?

最佳答案

幻灯片很奇怪且具有误导性。 SWIG 根本不会将值传递转换为引用传递。让我试着通过一个例子来澄清:

假设在示例中您有 C++ 函数

double dot_product(Vector a, Vector b);

现在在普通的 C++ 中(没有 SWIG,没有包装),你可以像下面的例子一样使用这个函数:

1.
Vector a = Vector(1,0);
Vector b = Vector(0,1);
double zero = dot_product(a, b);

2.
Vector *a = new Vector(1,0);
Vector *b = new Vector(0,1);
double zero = dot_product(*a, *b);

在这两种情况下,实际上使用 call-by-value 以完全相同的方式调用该函数。

SWIG 将所有对象包装到一个包含指向该对象的指针的结构中,因此在幕后 SWIG 为所有内容传递指针,因此使用了第二个示例中的语法。但是没有任何调用语义的转换/转换。

回答您的问题:



我不知道。正如另一个答案中所述,可能是一个笑话。



这是一个非常广泛的问题,肯定存在陷阱,尤其是与内存管理相关的陷阱。然而,这种特殊的“转变”不是问题。

作为引用,这里是 relevant entry in the SWIG manual 。请注意,它的措辞不同:函数被转换为接受指针。没有提到“调用语义”(因为这不是问题)。

关于python - Swig 工具和 C++。太聪明了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40481860/

10-14 04:50