好吧,这是一个很难回答的问题。问题的根本原因是没有一个python类型与C函数指针完全等价。Python函数有点接近,但是由于一些原因它们的接口不匹配。在
首先,我想从这里提到包装构造函数的技术:
http://wiki.python.org/moin/boost.python/HowTo#namedconstructors.2BAC8factories.28asPythoninitializers.29。这样就可以为对象编写一个^ {< CD1> }函数,它不直接对应于实际的C++构造函数。另外请注意,如果对象不是默认可构造的,则可能必须在boost::python::class_构造中指定boost::python::no_init,然后def一个实__init__函数。在
回到问题上来:
你通常只想传递一小部分函数吗?在这种情况下,您只需声明一个特殊的枚举(或专用类),生成一个接受该枚举的构造函数的重载,然后使用该重载来查找实际的函数指针。使用这种方法,您不能直接从python调用函数,但也没那么糟糕,而且性能将与使用真正的函数指针相同。在
如果您想提供一种通用的方法,可以用于任何python调用,那么事情就变得更复杂了。您必须向C++对象添加一个构造函数,该类接受一般的函子,例如使用^ {CD6}}或^ {CD7}}。如果需要,可以替换现有的构造函数,因为函数指针将正确转换为此类型。在
因此,假设您已经向boost::function添加了一个boost::function构造函数,那么您应该将这些函数添加到python包装代码中:struct WrapPythonCallable
<