<P>最近我在Python中包了很多C++代码,我发现这个块(直接从<a href="http://docs.python.org/extending/extending.html#a-simple-example%5d" rel="nofollow">python documentation</a>)中有点麻烦:</p>
<pre><code>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 */
};
</code></pre>
<p>问题是将<code>kwarg_parrot</code>,类型为<code>PyCFunctionWithKeywords</code>转换为<code>PyCFunction</code>的行。在</p>
<P>来自C++背景(并且考虑到我正在包装C++代码),使用C样式的CAST似乎是错误的。我尝试了<code>static_cast</code>,和{<cd5>},这两种方法都会导致编译器抱怨(有充分的理由,这确实是一种不安全的转换)。唯一可行的C++选项似乎是^ {CD6}},但就我所知,这是一个更为冗长的C风格的版本。在</p>
<p>当然,上面的<em>是用一个<code>extern "C"</code>块包装的,所以C方式也许是正确的。有人有更好的主意吗?(我真正希望看到的是一个能够根据关键字自动生成doc字符串的解决方案。)</p>
<p>不幸的是,解决方案Boost.Python斯威格也不在桌上了。(我在一个丑陋的框架内工作)</p>