问题标签 [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 投票
2 回答
731 浏览

c++ - 如何组织 python / Boost Python 项目

我有一个 python 项目,我想使用 Boost::Python 与一些 C++ 库交互。我想知道其他人如何在同一个项目中组织他们的 python/boost::python/C++ 代码。

我所说的组织是指文件/目录结构、构建过程等。

0 投票
2 回答
6227 浏览

python - 使用 Boost.python 将 Python 列表传递给 C++ 向量

如何将我的对象类型的 Python 列表传递给ClassName接受 a 的 C++ 函数vector<ClassName>

我发现的最好的是这样的:example。不幸的是,代码崩溃了,我似乎无法弄清楚原因。这是我使用的:

0 投票
3 回答
4559 浏览

c++ - Boost::python 使用和返回模板公开 C++ 函数

我需要为 C++ 代码库构建 python 绑定。我使用 boost::python 并且在尝试公开包含使用和返回模板的函数的类时遇到了问题。这是一个典型的例子

典型的 T 是字符串、双精度、向量。

阅读文档后,我尝试对使用的每种类型使用瘦包装器。这是字符串和双精度的包装器以及相应的类声明。

它可以编译,但是当我尝试使用 python 绑定时,我得到了一个 C++ 异常。

有趣的是,当我只为双精度或字符串值公开 Foo 时,即

它工作正常。我错过了什么吗?

0 投票
1 回答
682 浏览

c++ - 如何为boost python中作为元组的一部分返回的对象指定返回策略

我有一个创建 C++ 对象的函数。在重构之前,我从 C++ 函数返回一个指针,在 boost python 包装器声明中,我会使用boost::python::return_value_policy<boost::python::manage_new_object>. 像这样的东西:

现在我需要返回的不仅仅是对象,还有一些错误信息,重构基本上改变了 C++ 函数,让它返回一个元组:

我应该如何指定此更改的退货政策?

0 投票
2 回答
729 浏览

c++ - 使用 Boost Python 创建和访问frozenset

我有一些 C++ 方法std::set<std::string>作为参数或返回值。我想将其映射到 Python frozenset(或常规set),但似乎没有一种直接的方法可以做到这一点。有谁知道如何完成这项任务。

0 投票
1 回答
486 浏览

random - boost.python 中的随机数生成器

如何在“带有 numpy 的 Python”代码中使用与 C++0x 代码相同的随机数生成器?

我目前正在使用

在 C++ 和

在 Python 中。

我暴露了 C++ 的随机数生成器:

如何将它与采用 numpy.random 的 Python 方法一起使用?

0 投票
1 回答
1404 浏览

c++ - 关于语法错误的 Python 异常文本(增强库)

我有这个代码 snnipet (整个程序编译和链接正确):

程序试图执行的文件有语法错误,所以抛出异常。当程序尝试获取错误消息时崩溃...

该代码可以很好地处理运行时错误,但会因语法错误而崩溃。

我怎样才能得到这种错误的错误字符串?

提前致谢

0 投票
1 回答
5621 浏览

c++ - Boost-python 如何将 c++ 类实例传递给 python 类

我是提升 python 的新手。我必须首先在 cpp 代码中初始化一个 cpp 类实例,然后将此 cpp 实例传递给 python 代码,使用 python 类实例来调用它(cpp 实例)。我尝试过 Python/C API 方式,但失败了,所以我想知道如何将 c++ 类实例传递给 python 类。

以下是我的代码,由 boost python 演示更改而来。

在 main.cpp

在 python.py 中

在上面的代码中,我想将 worldObjectPtr 传递给 pInstanceHelloPython,因此,pInstanceHelloPython 可以将 worldObjectPtr->name 设置为 Python。但我只是不知道该怎么做。提前感谢您的耐心等待!!

0 投票
1 回答
1483 浏览

c++ - 使用 boost.python 从 UTF-8 编码的 char* 返回 python unicode 实例

我正在尝试做一些应该非常简单的事情,但是我没有太多运气从现有文档中弄清楚如何做。

对于 python 2 项目,我试图将列表 gettext-translated 字符串作为 unicode 实例返回给 python。gettext() 的返回值是一个 UTF-8 编码的 char*,使用 PyUnicode_FromString 将其转换为 python unicode 实例应该非常简单。我觉得这很简单,但我似乎无法弄清楚如何做。

根据 Ignacio Vazquez-Abrams 和 Thomas KI 的评论,这确实适用于单个字符串;对于这种情况,您可以绕过所有 boost.python 基础设施。这是一个例子:

它通过通常的 def 语句公开:

不幸的是,当您想要返回 unicode 实例列表时,这不起作用。这是我天真的实现:

但这不会编译: boost::python::list 似乎确实可以处理 PyObject 值。

0 投票
1 回答
289 浏览

c++ - 当具有 C++ python 扩展的库用作 RHEL5 上的插件时,动态转换返回 null

我有一个带有 C++ python 扩展的库(C++ 调用 python,而后者又调用 C++)使用 boost::python 和 python 库(这很混乱,但很多都是遗留的),当独立测试时可以正常工作。特别是,某个 dynamic_cast 可以正常工作。

但是,当使用 gcc 4.1.2 和外部应用程序将该库打包用作 RHEL5 上的插件时,dynamic_cast 返回 NULL 导致应用程序无法按预期工作。在 Windows 上(使用 Visual Studio 2005 和 2008 测试 Vista 64 位)它工作正常。例如,当我使用 ddd 进行调试时,我可以看到转换前的指针具有正确的 type_name (我想像往常一样被编译器轻微损坏?)。此处的任何特定调试技巧也会有所帮助。

reinterpret_cast 解决了这个问题。虽然这肯定会受到阻碍,但我不知道如何进行,尤其是。因为这可能是由于外部应用程序的问题。这是一个令人费解的混乱,几乎看起来是徒劳的,但如果它可以帮助这里有一些示例代码。下面的 C++ 片段创建了一个“smart_handle”来对存储在字符串“input”中的某些 python 命令进行排队。字符串 IMPORT 导入一些函数的位置和定义,这些函数在函数调用 py_api::execute_py_command 中被 boost::python::exec(..) 调用:

make_smart_handle 定义为:

函数 set_command_queue 在 python __init__.py 中定义为:

现在,在单独的 python 文件中定义的实际 python 函数 func1、func2 等调用命名空间“namesp”下定义的 C++ 函数。这些 C++ 函数的第一行是通过以下方式将“smart_handle”恢复到“queue”:

正是在上述函数 smart_handle_cast 中,当库用作外部应用程序中的插件时,使用了返回 NULL 的 dynamic_cast。使用 reinterpret_cast 可以使其正常工作。smart_handle_cast 返回一个 const boost::weak_ptr。对于那些感兴趣的人,这里是 smart_handle_cast<..>() 函数的定义: