http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf 它来自上面的链接:
我知道这是一本旧刊物,因此信息可能已过时。
我想问一下:
“如果你不太聪明,似乎可以正常使用C ++” 什么意思,太聪明了?
在编写C ++模块和使用swig
工具扩展Python的地方,我是否已经非常谨慎地知道这种情况/情况?
答案 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。请注意,它的措辞不同:函数被转换为接受指针。没有任何关于"调用语义的说法" (因为这不是问题)。