2016-11-08 1 views
13

http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf Es kommt von oben Link:Swig-Tool und C++. zu klug sein

enter image description here

Ich weiß, dass es eine alte Publikation ist, so dass es möglich ist, dass Informationen veraltet sind.

würde ich fragen:

„Scheint mit C++ zu funktionieren, wenn Sie nicht zu clever sind“ Was bedeutet es, zu sein, zu klug?

Gibt es bekannte Situation/Fall, dass ich sehr vorsichtig sein sollte, wo ich C++ Module programmieren und Python mit swig Werkzeug erweitern?

+1

Bei einer Schätzung würde ich annehmen, dass sie sagen, dass es funktioniert, wenn Ihr Kopierkonstruktor Semantik erwartet hat, aber ich kann nicht sicher sagen. – Flexo

+0

Wenn Sie '--wrap' mit' ld' verwenden, könnte das stören, obwohl das auch für C gilt – OMGtechy

Antwort

2

Die Folie ist seltsam und irreführend. SWIG transformiert Pass-by-Value überhaupt nicht in Pass-by-Reference. Lassen Sie mich versuchen, an einem Beispiel zu verdeutlichen:

Sagen wir, wie im Beispiel Sie die C haben ++ Funktion

double dot_product(Vector a, Vector b); 

Jetzt einfach in C++ (kein SWIG, keine Verpackung) Sie diese Funktion nutzen zu können, wie in die folgenden Beispiele:

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); 

In beiden Fällen wird die Funktion genau so aufgerufen, wie Call-by-Value.

SWIG umschließt alle Objekte in einer Struktur, die einen Zeiger auf das Objekt enthält. Unter der Haube übergibt SWIG also Zeiger für alles und verwendet daher eine Syntax wie im zweiten Beispiel. Aber es gibt keine Umwandlung/Transformation der Rufsemantik, egal welche.

Um Ihre Fragen zu beantworten:

„Scheint mit C++ zu funktionieren, wenn Sie nicht zu clever sind:“ Was es bedeutet zu klug zu sein?

Ich habe keine Ahnung. Wie in einer anderen Antwort gesagt, wahrscheinlich ein Witz.

Gibt es bekannte Situation/Fall, dass ich sehr vorsichtig sein sollte, wo ich C++ - Module programmieren und Python mit dem Swig-Tool erweitern?

Dies ist eine sehr breite Frage, und es gibt sicherlich Fallstricke, insbesondere im Zusammenhang mit Speicherverwaltung. Diese besondere "Transformation" ist jedoch kein Problem.

Als Referenz ist hier die relevant entry in the SWIG manual. Beachten Sie, dass es anders formuliert ist: Die Funktion wird umgewandelt, um Zeiger zu akzeptieren. Über "Call Semantics" wird nichts gesagt (da dies kein Problem ist).

3

Dieses PDF scheint eine Kopie von Folien zu sein, die von einer Präsentation von David Beazley auf der 7. Internationalen Python-Konferenz stammen. Ich vermute, dass es einen Witz oder eine verbale Erklärung dessen gab, was er mit diesem Satz meinte.

scheint mit C++ zu funktionieren, wenn Sie nicht zu klug

sein werden

hier ein link auf seiner Website, wenn Sie mit ihm in Kontakt treten wollen und ihn direkt fragen. Sein Twitter-Account ist dabeaz, was eine bessere Möglichkeit sein könnte, ihn zu kontaktieren.

Verwandte Themen