boost-python 相关问题

用于直观和紧密集成c ++和python的库。

Boost Python:公开 std::enums 列表

我有以下结构: 枚举类标签 { 二维码, 四月, 辣椒 } 结构选项 { std::list 标签; } 我想使用 boost python 在 Python 包中公开它。 这是我的

回答 1 投票 0

如何声明一个可以接受任何Python可迭代的C++函数?

我们有类似的功能 void myf(const boost::python::list& l) {...} 有没有办法接受任何Python可迭代,或者不那么笼统地接受任何集合?

回答 1 投票 0

to_python_converter ,是否需要值?

我已经将我的代码简化为以下可编译代码,使用gcc13,boost 1.78和python3。 #包括 #包括 #包括 模板 我已将代码简化为以下可编译代码,其中包含 gcc13、boost 1.78 和 python3。 #include <iostream> #include <string> #include <boost/python.hpp> template <typename base, typename derived> class cloneable : public base { protected: using base::base; virtual base* clone() const override { return new derived{static_cast<derived const &>(*this)}; } }; struct SX {}; struct MT { virtual const std::string& type() const =0; virtual const SX* xc() const =0; virtual MT* clone() const =0; virtual ~MT() = default; }; struct F3MT : public cloneable<MT,F3MT> { const MT* underlying_ = nullptr; static inline const std::string t{"F"}; const std::string& type() const override { return t; } const SX* xc() const override { return nullptr; } }; using namespace boost::python; template <typename cppclass_t> struct cppclass_ptr_to_python_obj { static PyObject* convert(const cppclass_t* mptr) { if (!mptr) Py_RETURN_NONE; return incref( object(mptr).ptr() ); } }; MT* get_fm() { auto* fm = new F3MT; auto* fmu = new F3MT; fm->underlying_ = fmu; return fm; } BOOST_PYTHON_MODULE(myseven) { class_<MT, MT*, boost::noncopyable>("MT", no_init) .def("type", &MT::type, return_value_policy<copy_const_reference>{} ) .def("xc", &MT::xc, return_value_policy<reference_existing_object>{}) ; to_python_converter<const MT*, cppclass_ptr_to_python_obj<MT>>{}; class_<F3MT, F3MT*, bases<MT>>("F3MT") .def_readonly("underlying", &F3MT::underlying_) ; to_python_converter<const F3MT*, cppclass_ptr_to_python_obj<F3MT>>{}; def("getfm", &get_fm, return_value_policy<reference_existing_object>{}); } 我构建了一个.so并将其加载到python中,得到以下错误。 我正在尝试通过指针传递 MT。 >>import myseven.so >>x = myseven.getfm() >>x.underlying TypeError: No to_python (by-value) converter found for C++ type: MT 我认为通过注册转换来作用于指针,就不需要按值转换。毕竟我将指针存储为成员。 请忽略内存泄漏,因为这是简化的代码。 cppclass_ptr_to_python_obj 转换器需要托管一个转换函数,该函数在 const-ptr 之上也接受 cppclass_t 的 const-ref。

回答 1 投票 0

如何在不构建模块的情况下向 Python 公开 C++ 类

我想知道是否有任何方法可以将 C++ 类公开给 Python,但无需构建中间共享库。 这是我想要的场景。例如我有以下 C++ 类: 类...

回答 3 投票 0

python::boost 模块优于别名:RecursionError

所以我正在使用 python boost。我的目标是能够从 python 模块重载 c++ 函数。我已经做到了,但是在使用别名时我观察到了奇怪的行为。 我有

回答 1 投票 0

如何让python3 import同时检查.so和...-g.so?

我们通过 boost.python 将 C++ 代码暴露给 python。我们生成发布和调试版本。 发布版本生成 lib.so 文件 调试版本生成 lib-g.so 文件。 然后我们的Python代码 导入库 我们通过 boost.python 将 C++ 代码暴露给 python。我们生成发布和调试版本。 release 构建生成 lib.so 文件 调试构建生成 lib-g.so 文件。 我们的Python代码 import lib<mymodule> 有没有办法放置一个钩子,以便这些导入语句可以探索 libmymodule.so 以及如果找不到 libmymodule-g.so ? 尝试以下操作: import importlib try: import libmymudule except ImportError: libmymudule = importlib.import_module("libmymudule-g")

回答 1 投票 0

无法在带有无限循环的boost.python模块中通过Ctrl-c杀死进程

我做了一个带有无限循环的boost.python模块。但是我无法通过ctrl-c杀死进程。下面是一个例子。 C++ #包括 #包括 我做了一个带有无限循环的boost.python模块。但是我无法通过ctrl-c杀死进程。下面是一个例子。 C++ #include <boost/python.hpp> #include <boost/python.module.hpp> #include <boost/python.def.hpp> #include <iostream> usring namespace boost::python; void foo() { int it=0; while (true) { //endless loop ++it; std::cout<< it <<std::endl; sleep(3); } } BOOST_PYTHON_MODULE(ctopy) { def("foo",foo); } 蟒蛇: import ctopy ctopy.foo() 结果: 1 2 3 4 ..................... 我无法通过 Ctrl-c 杀死前台进程。为什么模块不接受 Ctrl-c 发送的信号“SIGINT”。如何使其工作。 您应该在扩展代码中定期调用 PyErr_CheckSignals() 并在返回 exit() 时调用 -1: while (true) { //endless loop ++it; std::cout<< it <<std::endl; sleep(3); if(PyErr_CheckSignals() == -1) { exit(1); } }

回答 1 投票 0

用于自定义 Bool 类型的 Boost Python 转换器

我有一个自定义类型,它基本上是一个具有额外功能的 C++ 布尔值。我需要通过 Python 访问我的 C++ 库,该框架基于 Boost。 目前我必须使用整数而不是...

回答 1 投票 0

如何在Boost 1.74中构建libboost-python.so

Boost 构建不会为我的项目中的 python 模块生成 libboost_python38.so.1.74.0 。 我尝试像这样构建 boost 库,但 libboost_python38.so.1.74.0 没有出现在我身上: wget https://boos...

回答 0 投票 0

向 python 嵌入式解释器公开 C++ 类实例

我正在寻找一种将 C++ 类实例公开给 python 嵌入式解释器的简单方法。 我有一个 C++ 库。这个库被包装了(暂时使用 swig),我可以使用它...

回答 4 投票 0

使 boost python 数组与 for 循环一起工作

我正在尝试使用 boost python 来创建一个数组 #包括 #包括 #包括 类 MyObject { 民众: 我的对象(整数值) : 值_(...

回答 1 投票 0

静态方法(或工厂(?))创建的 boost python 对象中的虚拟覆盖

我正在尝试在 python 中创建一个类来覆盖 C++ 类中的(纯)虚函数(使用 boost.python)。问题是 C++ 类是通过静态成员函数创建的(所有

回答 3 投票 0

在boostpython中使用共享指针自动下传返回值

我想知道是否有办法在python中使用boost::python将一个 "downcasted "的对象作为函数结果公开,同时使用共享指针。考虑以下情况: class A { ...

回答 1 投票 0

如何使用Boost::GIL从python字节串中读取图片信息?

我写了一个函数从文件头读取图像的宽度和高度 int read_image_dimensions() { namespace bg = boost::gil; std::string filepath = "image.png"; std::ifstream byte_stream(...)

回答 1 投票 1

当使用Boost.python包装一个C++模块时,导入到python中时,未定义符号。

我正试图使用Boost.Python为一个C++库fbow创建一个Python封装器。我的代码是从另一个包装器 pyDBoW3 中得到的灵感,它与 DBoW3 库非常相似。以下是我目前能够做到的:......

回答 1 投票 0

在Boost Python上运行bjam的链接器错误教程

我一直在努力解决这个问题,到现在已经四十个小时了,用尽了所有能找到的boost python资源,用尽了所有能想到的安装和构建方式,但都没有找到 ...

回答 1 投票 5

Boost.Python通过引用进行调用:TypeError:找不到C ++类型的to_python(按值)转换器:

我正在尝试使用Boost.Python将C ++类公开给Python。这是我要做的事情的简化版本:我有一个来自boost :: noncopyable的A类,以及一个带有...

回答 2 投票 20

在C ++中提取从C ++类继承的Python对象

我想从C ++(Base)导出一个抽象类,以在Python(Derived)中创建一个继承的类,最后提取该类以创建一个C ++指针对象(Base *)。我找到了这个解决方案。但是...

回答 1 投票 1

Python代码在shell中工作正常,但在文件中调用时却不行

我在终端外壳上运行以下代码:>>> import Strat >>> x = Strat.Try()>>> x.do_something()您可以在这里做任何事情!!!(这是do_something的输出)...

回答 1 投票 0

在Windows上使用boost / python

我正在尝试使用boost / python进入python的C ++扩展。我已经下载了boost 1_73并通过调用bootstrap然后安装了b2 --with-python在Visual Studio中安装了...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.