,我怎么暴露了两个构造:Boost.Python的重载的构造函数在给定一个C++类的Boost.Python暴露numpy的阵列和Python列表
- 一个需要numpy的阵列,并
- 另一种需要一个Python列表?
,我怎么暴露了两个构造:Boost.Python的重载的构造函数在给定一个C++类的Boost.Python暴露numpy的阵列和Python列表
我对你的意思并不是100%,但我假设你想要一个构造函数来取一个Python列表,另一个取一个numpy数组。有几种方法可以解决这个问题。最简单的方法是使用make_constructor功能和超载:
using boost;
using boost::python;
shared_ptr<MyClass> CreateWithList(list lst)
{
// construct with a list here
}
shared_ptr<MyClass> CreateWithPyArrayObject(PyArrayObject* obj)
{
// construct with numpy array here
}
BOOST_PYTHON_MODULE(mymodule)
{
class_<MyClass, boost::noncopyable, boost::shared_ptr<MyClass> >
("MyClass", no_init)
.def("__init__", make_constructor(&CreateWithList))
.def("__init__", make_constructor(&CreateWithPyArrayObject))
}
您可以更加聪明,在构造函数中使用的参数任意类型/个数。这需要一点巫毒才能完成。有关将原始函数定义作为构造函数公开的方法,请参见http://wiki.python.org/moin/boost.python/HowTo#A.22Raw.22_constructor。
谢谢。这看起来很棒! PyArrayObject在哪里定义? (我正在使用MacPorts并安装了py27-numpy,但似乎没有公开任何带有PyArrayObject的头文件。我查找了开发变体,但找不到任何文件。) – 2011-04-19 18:40:46
另外,有没有办法做到这一点boost :: shared_ptr?或者,有没有办法来包装我的其他静态成员函数返回MyClass,以便他们返回shared_ptr? – 2011-04-19 18:45:11
我用shared_ptr得到了这个工作!但是,我仍然无法找到PyArrayObject的任何标题。我会问另一个问题。再次感谢您的详细帮助。 – 2011-04-21 04:38:41
请修复您的语法 – 2011-04-19 15:51:29