Swig 工具和 C++。太聪明了
Swig tool and C++. Being too clever
http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf
它来自上面 link:
我知道这是一份旧出版物,因此信息可能已过时。
我想问:
"Seems to work fine with C++ if you aren't being too clever"
太聪明了是什么意思?
是否知道 situation/case 我在编写 C++ 模块和使用 swig
工具扩展 Python 时应该非常小心?
此 PDF 文件似乎是 David Beazley 在第 7 届国际 Python 会议上的演讲的幻灯片副本。我的猜测是有一个笑话或口头解释他这句话的意思。
Seems to work fine with C++ if you aren't being too clever
这是一个 link to his website if you want to get in touch with him and ask him directly. His twitter account is dabeaz,这可能(也可能不是)更好的联系方式。
这张幻灯片很奇怪并且具有误导性。 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);
在这两种情况下,实际上使用按值调用以完全相同的方式调用函数。
SWIG 将所有对象包装到一个包含指向该对象的指针的结构中,因此在幕后 SWIG 为所有对象传递指针,因此使用第二个示例中的语法。但是没有任何调用语义的转换/转换。
回答您的问题:
"Seems to work fine with C++ if you aren't being too clever" What does it mean, to be too clever?
我不知道。正如另一个答案中所述,可能是个玩笑。
Is there known situation/case that I shuold be very careful where I am programming C++ modules and extending Python using swig tool?
这是一个非常宽泛的问题,当然也有陷阱,尤其是与内存管理相关的问题。但是,这个特殊的 "transformation" 不是问题。
供参考,这里是relevant entry in the SWIG manual。请注意,它的措辞不同:函数 被转换为接受指针。关于 "call semantics" 什么也没说(因为这不是问题)。
http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf 它来自上面 link:
我知道这是一份旧出版物,因此信息可能已过时。
我想问:
"Seems to work fine with C++ if you aren't being too clever" 太聪明了是什么意思?
是否知道 situation/case 我在编写 C++ 模块和使用 swig
工具扩展 Python 时应该非常小心?
此 PDF 文件似乎是 David Beazley 在第 7 届国际 Python 会议上的演讲的幻灯片副本。我的猜测是有一个笑话或口头解释他这句话的意思。
Seems to work fine with C++ if you aren't being too clever
这是一个 link to his website if you want to get in touch with him and ask him directly. His twitter account is dabeaz,这可能(也可能不是)更好的联系方式。
这张幻灯片很奇怪并且具有误导性。 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);
在这两种情况下,实际上使用按值调用以完全相同的方式调用函数。
SWIG 将所有对象包装到一个包含指向该对象的指针的结构中,因此在幕后 SWIG 为所有对象传递指针,因此使用第二个示例中的语法。但是没有任何调用语义的转换/转换。
回答您的问题:
"Seems to work fine with C++ if you aren't being too clever" What does it mean, to be too clever?
我不知道。正如另一个答案中所述,可能是个玩笑。
Is there known situation/case that I shuold be very careful where I am programming C++ modules and extending Python using swig tool?
这是一个非常宽泛的问题,当然也有陷阱,尤其是与内存管理相关的问题。但是,这个特殊的 "transformation" 不是问题。
供参考,这里是relevant entry in the SWIG manual。请注意,它的措辞不同:函数 被转换为接受指针。关于 "call semantics" 什么也没说(因为这不是问题)。