Swig工具和C ++。太聪明了

时间:2016-11-08 08:07:23

标签: python swig

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

enter image description here

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

我想问一下:

“如果你不太聪明,似乎可以正常使用C ++” 什么意思,太聪明了?

在编写C ++模块和使用swig工具扩展Python的地方,我是否已经非常谨慎地知道这种情况/情况?

2 个答案:

答案 0 :(得分:3)

此PDF似乎是David Beazley在第7届国际Python大会上的演示文稿中的幻灯片副本。我猜是有一个笑话或口头解释他的意思是什么意思。

  

如果你不太聪明,似乎可以正常使用C ++

如果您想与他联系并直接询问他,请访问他的网站link。他的Twitter帐户是dabeaz,可能(或可能不是)与他联系的更好方式。

答案 1 :(得分:2)

幻灯片很奇怪且具有误导性。 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会为所有内容传递指针,因此使用第二个示例中的语法。但是没有任何转换/转换调用语义。

回答你的问题:

  

"如果你不太聪明的话,似乎可以和C ++一起使用。"什么意思,太聪明了?

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

  

在编写C ++模块和使用swig工具扩展Python时,我是否已经非常谨慎地知道这种情况/案例?

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

供参考,这是relevant entry in the SWIG manual。请注意,它的措辞不同:函数被转换为接受指针。没有任何关于"调用语义的说法" (因为这不是问题)。