问题标签 [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.
c++ - 如何组织 python / Boost Python 项目
我有一个 python 项目,我想使用 Boost::Python 与一些 C++ 库交互。我想知道其他人如何在同一个项目中组织他们的 python/boost::python/C++ 代码。
我所说的组织是指文件/目录结构、构建过程等。
python - 使用 Boost.python 将 Python 列表传递给 C++ 向量
如何将我的对象类型的 Python 列表传递给ClassName
接受 a 的 C++ 函数vector<ClassName>
?
我发现的最好的是这样的:example。不幸的是,代码崩溃了,我似乎无法弄清楚原因。这是我使用的:
c++ - Boost::python 使用和返回模板公开 C++ 函数
我需要为 C++ 代码库构建 python 绑定。我使用 boost::python 并且在尝试公开包含使用和返回模板的函数的类时遇到了问题。这是一个典型的例子
典型的 T 是字符串、双精度、向量。
阅读文档后,我尝试对使用的每种类型使用瘦包装器。这是字符串和双精度的包装器以及相应的类声明。
它可以编译,但是当我尝试使用 python 绑定时,我得到了一个 C++ 异常。
有趣的是,当我只为双精度或字符串值公开 Foo 时,即
它工作正常。我错过了什么吗?
c++ - 如何为boost python中作为元组的一部分返回的对象指定返回策略
我有一个创建 C++ 对象的函数。在重构之前,我从 C++ 函数返回一个指针,在 boost python 包装器声明中,我会使用boost::python::return_value_policy<boost::python::manage_new_object>
. 像这样的东西:
现在我需要返回的不仅仅是对象,还有一些错误信息,重构基本上改变了 C++ 函数,让它返回一个元组:
我应该如何指定此更改的退货政策?
c++ - 使用 Boost Python 创建和访问frozenset
我有一些 C++ 方法std::set<std::string>
作为参数或返回值。我想将其映射到 Python frozenset
(或常规set
),但似乎没有一种直接的方法可以做到这一点。有谁知道如何完成这项任务。
random - boost.python 中的随机数生成器
如何在“带有 numpy 的 Python”代码中使用与 C++0x 代码相同的随机数生成器?
我目前正在使用
在 C++ 和
在 Python 中。
我暴露了 C++ 的随机数生成器:
如何将它与采用 numpy.random 的 Python 方法一起使用?
c++ - 关于语法错误的 Python 异常文本(增强库)
我有这个代码 snnipet (整个程序编译和链接正确):
程序试图执行的文件有语法错误,所以抛出异常。当程序尝试获取错误消息时崩溃...
该代码可以很好地处理运行时错误,但会因语法错误而崩溃。
我怎样才能得到这种错误的错误字符串?
提前致谢
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。但我只是不知道该怎么做。提前感谢您的耐心等待!!
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 值。
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<..>() 函数的定义: