最近我在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
,和{
当然,上面的是用一个extern "C"
块包装的,所以C方式也许是正确的。有人有更好的主意吗?(我真正希望看到的是一个能够根据关键字自动生成doc字符串的解决方案。)
不幸的是,解决方案Boost.Python斯威格也不在桌上了。(我在一个丑陋的框架内工作)
PyMethodDef是pythoncapi的一部分,所以我只使用C转换。Python和它所有的扩展都在使用它。保持一致。在
在处理不是Python API的一部分的对象时,使用C++进行转换。在
主Python实现是用C++编写的,而不是C++编写的。在
因此,计算
keywdarg_methods[]
的libpython代码是用C编写的,并通过C调用约定调用keywdarg_parrot
。在如果您想用Python集成C++风格,请找到一种使用方法boost.python相反。或者是赛顿。在
相关问题 更多 >
编程相关推荐