如何从 C++ 创建 Python Decimal 对象?

How do I create a Python Decimal object from C++?

...或存在于可导入库中的任何 Python 对象。我在 documentation 中找到了 PyDateTime_* 函数,用于从 datetime 模块创建对象,但我找不到与 python decimal 模块有关的任何内容。这可能吗?

正在寻找一种 Boost.Python 方法(如果有的话),但如果没有,本地 API 就足够了。

应该够直白了吧。虽然未经测试,但类似以下内容应该有效:

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

请记住,这里的所有三个 PyObject * 引用都应该在完成后删除(使用 Py_DECREF())。另外,出于教学目的,我在这里使用 assert()。实际代码应该有真正的错误处理。

此外,我在这里使用原始 Python/C API。我从来没有用过boost-python,所以我不知道有什么区别,如果有的话。

在 Boost.Python 中类似于

bp::object decimal = bp::import("decimal").attr("Decimal");
bp::object decimal_obj = decimal(1, 4);