2016-07-20 14 views
2

... oder ein Python-Objekt, das in einer importierbaren Bibliothek vorhanden ist. Ich habe PyDateTime_ * Funktionen in der documentation zum Erstellen von Objekten aus dem Datetime-Modul gefunden, aber ich kann nichts mit dem Python-Dezimal-Modul zu tun. Ist das möglich?Wie erstelle ich ein Python-Dezimal-Objekt aus C++?

Auf der Suche nach einem Boost.Python Weg, wenn es einen gibt, aber die nativen APIs wird ausreichen, wenn nicht.

Antwort

2

In Boost.Python die

so etwas wie
bp::object decimal = bp::import("decimal").attr("Decimal"); 
bp::object decimal_obj = decimal(1, 4); 
+0

yep das hat funktioniert. Vielen Dank! –

2

Sollte einfach genug sein. Obwohl nicht getestet, sollte etwa wie folgt funktionieren:

PyObject * decimal_mod = PyImport_ImportModule("decimal"); 
assert(decimal_mod); 
PyObject * decimal_ctor = PyObject_GetAttrString(decimal_mod, "Decimal"); 
assert(decimal_ctor); 
PyObject * four = PyObject_CallFunction(decimal_ctor, "i", 4); 
assert(four); 

Halten Sie daran, dass alle drei PyObject * Referenzen hier sollte decreffed werden (mit Py_DECREF()), wenn Sie mit ihnen fertig sind. Auch hier verwende ich assert() für pädagogische Zwecke. Der tatsächliche Code sollte eine echte Fehlerbehandlung enthalten.

Auch ich benutze die rohe Python/C-API hier. Ich habe Boost-Python noch nie benutzt, daher weiß ich nicht, welche Unterschiede existieren.

+0

i die andere Antwort habe akzeptiert würde, wie ich es getestet haben und es funktioniert (obwohl ich boost-Python in meiner Frage getaggt ich nicht wirklich tat sage es, damit ich meine Frage jetzt bearbeiten werde). Danke für die Antwort, ich bin mir sicher, dass dies jedem helfen wird, der diese Seite findet, die die Boost-Abhängigkeit nicht will. –

Verwandte Themen