In meinem C++ Code, den ich eine Klasse Foo mit vielen Methoden habe einen Bar-Typen Variable als Argument nehmen:Wie Sie eine benutzerdefinierte implizite Konvertierung zu einem C++ - Typ in Boost :: Python hinzufügen?
class Foo {
public:
void do_this(Bar b);
void do_that(Bar b);
/* ... */
};
Bar hat eine Reihe von Konstrukteuren, die ein neues Objekt aus vielen gängigen Typen wie int erstellen, std :: string, float, etc:
class Bar {
public:
Bar(int i);
Bar(float f);
Bar(std::string s);
/* ... */
};
ich wickelte diese mit boost :: Python und ich bin jetzt in der Lage meine Foo Methoden verwenden Python Literale direkt aufrufen, da sie implizit Objekte Bar erhalten umgewandelt.
f = Foo()
f.do_this(5)
f.do_that("hello")
Nun, ich möchte in der Lage sein, auch andere Python-Typen zu verwenden, wie Tupel, wie folgt aus:
f.do_that((1,2,3))
Aber ich will nicht die Original-Bar Definition berühren, und Ich möchte meine C++ - Bibliothek nicht mit Boost :: Python-Sachen verseuchen. Ich möchte eine Wrapper-Funktion in meinen Bindungscode schreiben, aber ich kann einfach nicht verstehen, ob dies möglich ist und was der richtige Weg dafür ist.
Mit anderen Worten: Kann ich eine Factory-Funktion registrieren, die in Python als automatische Konvertierung verwendet wird?
danke, das ist eine interessante Idee, aber nicht das, was ich suche ... Ich möchte Tupel direkt verwenden. Es ist mir gelungen, einen neuen Konstruktor für Bar-akzeptierende Tupel zu erstellen, aber es gibt keine implizite Konvertierung, ich muss Bar ((1,2,3)) explizit schreiben. : | – UncleZeiv
Ableiten von Tupel-Klasse und machen Sie eine beliebige Zuweisung von Int Sie wollen. (Operator, - ist auch anwendbar) – Dewfy