gpt4 book ai didi

python - Boost.python 为 numpy 数组和 python 列表重载构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:50 42 4
gpt4 key购买 nike

给定一个使用 Boost.Python 公开的 C++ 类,我如何公开两个构造函数:

  • 接受一个 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寻找一种将原始函数定义公开为构造函数的方法。

关于python - Boost.python 为 numpy 数组和 python 列表重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5713795/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com