2016-11-08 69 views
13

http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf 它來自上面的鏈接:Swig工具和C++。作爲太聰明

enter image description here

我知道這是一個古老的發佈中,因此它是可能的信息是過時的。

我想問:

「似乎做工精細用C++,如果你不是太聰明」 是什麼意思,是太聰明嗎?

是否有已知的情況/案例,我非常小心,我在編程C++模塊並使用swig工具擴展Python?

+1

在猜測我會假設他們說'它的工作,如果你的複製構造函數有預期的語義',但我不能肯定地說。 – Flexo

+0

如果你使用'--wrap'和'ld',它可能會干擾,儘管這也適用於C – OMGtechy

回答

2

這張幻燈片很奇怪,誤導人。 SWIG不會將通過值轉換爲通過引用。讓我嘗試用一​​個例子來闡明:

比方說,在這個例子中你有C++函數

double dot_product(Vector a, Vector b); 

現在,在純C++(不痛飲,沒有包裝),你可以使用這個功能在下面的例子:

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傳遞指針指向所有內容,因此使用第二個示例中的語法。但是沒有任何轉換/轉換的調用語義。

回答您的問題:

「似乎做工精細用C++,如果你不是太聰明」是什麼意思,是太聰明嗎?

我不知道。正如另一個答案所述,可能是一個笑話。

是否有已知的情況/案例,我非常小心,我在編程C++模塊和使用swig工具擴展Python?

這是一個非常寬泛的問題,肯定存在一些缺陷,特別是與內存管理有關的缺陷。但是,這個特殊的「轉型」不是問題。

僅供參考,這裏是relevant entry in the SWIG manual。請注意,它的措辭不同:函數被轉換爲接受指針。沒有關於「調用語義」的說法(因爲這不是問題)。

3

此PDF似乎是David Beazley在第7屆國際Python大會上發表的幻燈片副本。我的猜測是有一個笑話或口頭解釋他的意思是這句話。

似乎做工精細用C++,如果你,如果你想與他取得聯繫,並直接問他是不是太聰明

這裏是一個link他的網站。他的推特賬號是dabeaz,可能(或不可能)成爲聯繫他的更好方式。