问题标签 [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.

0 投票
1 回答
423 浏览

c++ - 展开函数调用

这是一个很难描述的问题,所以如果有任何不清楚的地方,请告诉我。

我正在尝试解决我的 C++ 应用程序中可能出现的死锁情况,但在可视化适当的解决方案时遇到了麻烦。我试图连接的两个库对我施加的限制使我的问题非常复杂和麻烦,但它都可以归结为一个简单的图表。很简单,我有这样的情况

动作 2 恰好是一个计时器触发,我正在使用的库有这个计时器代码,它将在设定的时间后调用函数。

当我销毁计时器处理程序(操作 1)时计时器触发时会出现问题。计时器处理程序将等待计时器完成其功能,而计时器功能无法完成,因为它们正在等待调用 python 函数。为了进入 python,他们需要获取由计时器处理程序销毁操作持有的 GIL。

我想知道我是否有可能从线程 1 中断它在 GIL 上的等待并展开它的堆栈以使其摆脱这种死锁的危害。尽管我害怕深入到特定的操作系统实现中,但我想不出更好的解决方案。

换句话说,我想取消线程 1 的 Action 2 调用。这可能吗?

我应该提到我无法编辑线程 2 中的操作,即我无法编辑管理该线程的库。我可以将 python 的 GIL 锁修改为可能是尝试锁或定时锁,甚至可能是等待条件,但这真的很难实现。

我想最好的解决方案是修改 python 以等待 gil 和一个命名条件,当我想取消它在 GIL 上的等待时,我的线程 1 可以发出信号。但在走这条路之前,我想知道我是否遗漏了什么。

0 投票
1 回答
1736 浏览

c++ - 使用 Boost::Python 用参数包装纯虚方法

我目前正在尝试使用 Boost::Python 向 Python 公开一个 c++ 接口(纯虚拟类)。C++接口是:

代理.hpp

而且,通过阅读“官方”教程,我设法编写并构建了下一个 Python 包装器:

代理.cpp

请注意,我在构建它时没有问题。不过,我担心的是,正如您所见, AgentWrapper::start 似乎没有将任何参数传递给 Agent::start :

python 包装器如何知道“开始”接收一个参数?我该怎么做?

0 投票
2 回答
1085 浏览

c++ - 如何在不修改基类的情况下使用 Boost::Python 向导出的类添加方法?

我有一个无法修改的 C++ 类。但是,该类包含我需要能够在 Python 扩展中访问的项目的 std::list<>。由于 Boost::Python 似乎没有 std::list 和 Python 列表之间的内置转换,我希望能够用 C++ 编写一个可以为我做这种转换的方法,然后,当我将 C++ 类映射到 Python 类,我可以附加这个方法。

如果我可以像这样调用方法,我会更喜欢

0 投票
1 回答
1032 浏览

python - C++ iostreams 和 python

是否可以与 C++ iostream 和 python 互操作?我正在使用 boost-python 并想包装一个以 istream 和 ostream 作为参数的函数。

0 投票
1 回答
773 浏览

c++ - 解决 boost.python 中的重载

我有一个像这样的 C++ 类:

我的模板和重载是编译时已知的一组固定类型。应用程序代码派生自 ConnectionBase 并为它关心的事件覆盖 OnEvent。我可以这样做,因为类型集是已知的。OnEvent 是私有的,因为用户从不调用它,该类创建一个线程将其作为回调调用。C++ 代码有效。

我已经将它包装在 boost.python 中,我可以导入它并从 python 发布。我想在 python 中创建以下等效项:

我不关心(不想)公开默认的 OnEvent 函数,因为它们从不从应用程序代码中调用——我只想为 C++ 类提供调用的主体。但是......由于没有键入python,并且我见过的所有处理内部的boost.python示例都在C++方面,我对如何做到这一点有点困惑。如何覆盖特定的重载?

0 投票
1 回答
3065 浏览

c++ - 在 Boost::Python 中通过引用传递

考虑类似的事情:

好吧,让我们快进,假设我已经包装了这些类,将所有内容都暴露给 python,并且还假设我在 C++ 代码中实例化了一个 Parameter 对象,我将其传递给 python 脚本,并且该 python 脚本使用 MyClass 对象修改我在 C++ 代码中一开始创建的 Parameter 实例。

该代码执行后,C++ 中的参数实例不变!!!这意味着它是通过值(或类似的东西:S)而不是通过引用传递的。但我以为我声明它是通过引用传递的......

我似乎找不到关于通过引用传递的 Boost::Python 文档(尽管似乎有足够多的关于通过引用返回的文档......)。任何人都可以给一些提示或指针吗?

0 投票
1 回答
831 浏览

c++ - 使用 boost.python 导入带有 opencv 调用的方法,但由于编译后找不到符号而失败

所以我现在没有代码,因为我不在家......但我在 C++ 中使用了 python 的 boost 库来允许 python 访问一个名为 loadImageIntoMainWindow(string filepath) 的函数

在 C++ 源代码中,该方法调用在文件顶部导入的 opencv 方法,我在我的 Jamroot 文件中包含了 opencv,并且还找到了一种在命令行上手动编译和链接的方法......在任何一种情况下,当我运行我的python文件,它抱怨找不到第一个函数调用opencv方法的符号......

我一回到家就会更新 C++、命令行编译行、Jamroot 和 python 文件

这是果酱:

在我跑之后bjam --preserve-test-targets

或者

我明白了:

在 cpp 文件中,我做的远不止这些:

0 投票
1 回答
2505 浏览

c++ - 在 Boost.Python 中暴露一个指针

我有这个非常简单的 C++ 类:

我想从 Python 访问 head 变量,但我看到的消息是:

据我了解,发生这种情况是因为 Python 吓坏了,因为它没有指针的概念。如何从 Python 访问 head 变量?

我知道我应该使用封装,但我目前坚持需要非封装解决方案。

0 投票
1 回答
308 浏览

c++ - 在 boost::python 中暴露 boost::scoped_ptr

我收到一个编译错误,说 的复制构造函数scoped_ptr是私有的,带有以下代码片段:

这个例子虽然适用于 shared_ptr 。如果有人知道答案,那就太好了。谢谢

0 投票
3 回答
3528 浏览

c++ - 将python脚本添加到c ++项目

我将如何将用 python 编写的脚本添加到 c++ 项目中?谢谢

编辑:基本上所有脚本都是通过电子邮件发送一些数据。我想将数据和电子邮件地址传递给用 python 编写的函数。希望这能说明问题..