use*_*494 9 c++ python pybind11
我很好奇最灵活,最有效,最无缝的方法是让C++和Python相互通信.竞争者似乎是Pybind11,Boost.Python,两者都没有(只需编写函数和包装器,如下所示).
using namespace boost::algorithm;
static PyObject* strtest(PyObject* self, PyObject* args)
{
std::string s = "Boost C++ Libraries";
to_upper(s);
PyObject * python_val = Py_BuildValue("s", s.c_str());
return python_val;
}
PyMODINIT_FUNC initmath_demo(void)
{
static PyMethodDef methods[] = {
"Test boost libraries" },
{ NULL, NULL, 0, NULL }
};
PyObject *m = Py_InitModule("math_demo", methods);
}
Run Code Online (Sandbox Code Playgroud)
rya*_*dav 11
我会推荐PyBind11.我将它用于类似的用例,其中Python模块调用C++来执行更昂贵且性能更广泛的操作.Boost Python是一个更加丰富的库,其大小成本,因为PyBind11只是标题,它支持STL,这使得生活更容易传递基本数据结构而无需编写任何代码!如果你可以将你的调用包装到基本的C函数和原始数据类型,那么Cpython将是最好的!
小智 6
我们正在内部使用pybind11进行类似于您所描述的操作(从Python访问C ++模块)。我不愿意满足Boost的所有要求,而pybind11负责处理C ++和Python之间通常需要的许多“胶水”。诸如转换异常之类的事情在很多情况下并不容易想到,但是pybind11可以很好地处理。
另外,我们围绕C ++内部类编写包装器,以便pybind11可以是pybind11,而我们的内部核心引擎可以是C ++。翻译通常并不难。
pybind11的个人经验是“容易的事情很容易,困难的事情仍然很困难”。示例教程中涉及的所有内容都是第二天的习惯,但是不明显的内容通常需要进行一些挖掘才能找到一种好的方法。
总之,还是非常推荐。我会在心跳中再次将其用于新项目。
| 归档时间: |
|
| 查看次数: |
3029 次 |
| 最近记录: |