问题标签 [boost-python]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 PyQT 和 Boost.Python 之间共享小部件
我想知道是否可以在 PyQt 和 Boost.Python 之间共享小部件。
我将在我的一个使用 Qt 的应用程序中嵌入一个 Python 解释器。我希望我的应用程序的用户能够将他们自己的 UI 小部件嵌入到用 C++ 编程并通过 Boost.Python 公开的 UI 小部件中。
这是可能的吗?人们将如何去做呢?
python - 动态加载库的 CMake 输出名称?
我正在尝试编写 cmake 规则以在 Linux 上使用 boost.python 为 python 构建动态加载库。我想使用 'foo' 作为 python 模块名称。因此,必须调用该库foo.so
。但默认情况下,cmake 使用库命名的标准规则,所以如果我写
我会libfoo.so
输出的。甚至set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar")
会创造libfoobar.so
。
如何改变这种行为?
python - Boost.Python - 如何通过引用返回?
我正在使用 Boost.Python 从 C++ 类创建 Python 模块。我遇到了引用问题。
考虑以下情况,其中我有一个类 Foo 具有重载的 get 方法,可以按值或引用返回。
一旦我定义了一个签名,就很容易指定应该使用按值返回。但我认为应该可以通过使用 return_value_policy
. 但是,使用似乎合适的(doc);return_value_policy<reference_existing_object>
似乎没有工作。
我误解了它的作用吗?
注意:我知道在没有生命周期管理的情况下引用现有对象可能很危险。
更新:
看起来它适用于对象,但不适用于基本数据类型。
以这个修改后的例子为例:
在测试中给出了预期的结果:
c++ - 使用带有弱 Ptrs 的 Boost Python?
尝试在 C++ 中建立具有父子关系的依赖项。父级包含子级,子级有一个指向父级的弱指针。
我还希望能够从 Python 中的父级派生。但是,当我这样做时,连接此父子关系时出现弱指针错误。
C++ 代码:
Python绑定:
Python代码:
错误:
如果我尝试将提取的指向 Parent 的指针转换为 shared_ptr,我会在 Python 中得到一个 free() 无效指针错误。
有没有办法解决这个问题,或者我应该放弃在 Boost Python 中使用弱指针?
c++ - 指向 swig(或 Boost::Python)中的成员的指针
我从我的 C++ 应用程序为 python 做了一些绑定。
问题是我使用指向成员的指针(它用于计算最短路径并给出属性以最小化作为参数)。
这是 C++ 签名:
这就是我所做的(根据我在文档中的理解):
这就是我从 python 调用我的函数的方式:
这是我得到的错误:
我有一个使用默认第四个参数的重载方法,它工作得很好。
那么是否可以在 swig 中使用指向成员的指针?如果是,有什么诀窍?如果不是,那么最优雅的工作方式是什么?
感谢您的帮助!
更新:如果有人知道 Boost::python 是否确实做到了,我会切换到它。
python - 在 opensolaris 上安装 Shoutpy + Boost.python 时出现问题
我试图在opensolaris 2009.6 上安装shoutpy。它依赖于 boost.python。我已经boost_devel
从 blastwave 安装了库并链接/opt/csw/include/boost
到/usr/include/boost
. 但是当我尝试easy_install shoutpy
得到以下输出时
这是使用python2.6,opensolaris 2009.06,boost 1.35。
任何帮助都会很棒!
干杯
标记
编辑 - 这已在 serverfault 上交叉发布,因为它有点难以分类问题域在哪里。https://serverfault.com/questions/88724/problem-with-opensolaris-boost-python-and-shoutpy
python - Boost.Python:__init__ 接受 None 参数
我有一个用 Boost.Python 包装的 C++ 值类型,它有一个 NULL 值的概念。包装器代码的相关部分如下所示:
None
目前,尝试通过传递给该方法在 Python 中创建 NULL 实例__init__()
会导致接受 const 字符串引用的 C++ ctor 被使用无效引用调用。( &arg == NULL
)
是否可以捕获None
传递给构造函数的情况并优雅地处理它,或者至少在我的程序崩溃之前抛出一个有意义的异常?
使用 Boost 1.36 和 Python 2.6.2。
constructor - Boost.Python:在类外定义构造函数
给定一个类:
用 Boost.Python 包装:
是否可以创建在 Python 中显示为构造函数的工厂方法:
这样在python中:
c++ - Boost::Python 中的运算符=
如果我有类似以下课程的内容
有没有一种简单的方法可以使用 boost::python 将该功能导出到 python?该文档没有列出并且很好很容易
我不是 python 专家,所以说实话我什至不知道这是否有必要。但我想在我的 python 脚本中使用这个功能,所以我发布这个问题只是为了确保。
编辑:
这是我做 .def( self = self ) 时的编译器错误
c++ - Python、线程、GIL 和 C++
有没有办法让 boost::python 控制与 python 的每次交互的 Python GIL?
我正在用 boost::python 编写一个项目。我正在尝试为外部库编写 C++ 包装器,并使用 python 脚本控制 C++ 库。我无法更改外部库,只能更改我的包装程序。(我正在为所述外部库编写功能测试应用程序)
外部库是用 C 语言编写的,并使用函数指针和回调来完成大量繁重的工作。它是一个消息传递系统,因此当消息进入时,会调用一个回调函数,例如。
我在我的库中实现了一种观察者模式,以便多个对象可以监听一个回调。我所有的主要玩家都正确导出,并且在一定程度上我可以很好地控制事情。
外部库创建线程来处理消息、发送消息、处理等。其中一些回调可能会从不同的进程中调用,我最近发现 python 不是线程安全的。
这些观察者可以在 python 中定义,所以我需要能够调用 python 并且 python 需要在任何时候调用我的程序。
我像这样设置对象和观察者
然后我创建一个发送到连接的源并调用 receivedMsg 函数。
所以一个常规的 source.send('msg') 将进入我的 C++ 应用程序,进入 C 库,它将发送消息,连接将获取它,然后调用回调,它返回到我的 C++ 库和connection 试图通知所有的观察者,此时就是这里的python类,所以它调用了那个方法。
当然回调是从连接线程调用的,而不是主应用程序线程。
昨天一切都崩溃了,我无法发送 1 条消息。然后在 Cplusplus-sig 档案中四处挖掘之后,我了解了 GIL 和几个漂亮的功能来锁定东西。
所以我的观察者类的 C++ python 包装器现在看起来像这样
但是,当我尝试发送超过 250 条这样的消息时,这很有效
它再次崩溃。具有与以前相同的信息和症状,
所以我想这次我在调用我的 C++ 应用程序时遇到问题,而不是调用 python。
我的问题是,有没有办法让 boost::python 为每次与 python 的交互处理 GIL 本身?我在代码中找不到任何东西,而且很难找到 source.send 调用进入 boost_python 的位置:(