PyMethodD中的带关键字的PyCfFunction

2024-09-26 22:09:55 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我在Python中包了很多C++代码,我发现这个块(直接从python documentation)中有点麻烦:

static PyMethodDef keywdarg_methods[] = {
/* The cast of the function is necessary since PyCFunction values
 * only take two PyObject* parameters, and keywdarg_parrot() takes
 * three.
 */
{"parrot", (PyCFunction)keywdarg_parrot, METH_VARARGS | METH_KEYWORDS,
 "Print a lovely skit to standard output."},
{NULL, NULL, 0, NULL}   /* sentinel */
};

问题是将kwarg_parrot,类型为PyCFunctionWithKeywords转换为PyCFunction的行。在

来自C++背景(并且考虑到我正在包装C++代码),使用C样式的CAST似乎是错误的。我尝试了static_cast,和{},这两种方法都会导致编译器抱怨(有充分的理由,这确实是一种不安全的转换)。唯一可行的C++选项似乎是^ {CD6}},但就我所知,这是一个更为冗长的C风格的版本。在

当然,上面的是用一个extern "C"块包装的,所以C方式也许是正确的。有人有更好的主意吗?(我真正希望看到的是一个能够根据关键字自动生成doc字符串的解决方案。)

不幸的是,解决方案Boost.Python斯威格也不在桌上了。(我在一个丑陋的框架内工作)


Tags: ofthe代码documentationstatic解决方案nullmethods
2条回答

PyMethodDef是pythoncapi的一部分,所以我只使用C转换。Python和它所有的扩展都在使用它。保持一致。在

在处理不是Python API的一部分的对象时,使用C++进行转换。在

主Python实现是用C++编写的,而不是C++编写的。在

因此,计算keywdarg_methods[]的libpython代码是用C编写的,并通过C调用约定调用keywdarg_parrot。在

如果您想用Python集成C++风格,请找到一种使用方法boost.python相反。或者是赛顿。在

相关问题 更多 >

    热门问题