问题标签 [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 回答
617 浏览

c++ - 如何通过 Boost::Python 获取调用我的 C++ 函数的 Python 模块和行号?

我有一个 C++ 函数,它通过 Boost::Python 从许多 Python 函数中调用。当 C++ 函数检测到错误参数时,我想写一条日志消息并继续处理。在该日志消息中,我想记下调用 C++ 的 Python 模块和行号。我怎样才能做到这一点?

我能够从 C++ 中抛出一个异常,该异常被翻译成我可以捕获的 Python 异常,但这会中止我无法拥有的 C++ 函数。

例如,假设我想在 factorial() 收到小于一的数字时记录一条警告消息。忽略它可以轻松处理此案(并且确实如此)的事实——我的老板无论如何都想要一个警告。;)

此代码可以直接从 Python 调用,也可以从从 Python 调用的其他 C++ 函数调用,因此 C++ 堆栈跟踪本身并不是很有帮助。

我希望 Boost::Python 库从 C++ 中提供这种能力。

0 投票
1 回答
2250 浏览

c++ - boost::python 字符串可转换属性

我有一个 C++ 类,它有以下方法:

其中类Foo可转换为std::string(它有一个隐式构造函数 fromstd::string和一个强制转换std::string运算符)。

我定义了一个 Boost.Python 包装类,除其他外,它定义了一个基于前两个函数的属性:

我还将该类标记为可转换为/从std::string.

但是在运行时我仍然会在尝试访问此属性时遇到转换错误:

如何在没有太多包装函数样板的情况下实现转换?(我已经拥有 class 中的所有转换函数Foo,因此不希望出现重复。

0 投票
1 回答
1452 浏览

visual-c++ - 在 Visual Studio 9 下使用 boost::python 的 make_tuple

尝试构建以下简单示例

在这里可用,我最终在 Visual Studio 9 下遇到了这个编译错误

这是 boost::python 中的错误,还是我做错了什么?我怎样才能让上面的程序编译?

0 投票
2 回答
4784 浏览

c++ - 如何在 boost::python 中向模块添加属性?

您可以使用 getter 和 setter 向类添加属性(在简单的情况下):

那么你可以像这样从 python 中使用它:

但是如何将属性添加到模块本身(不是类)?

我可以使用上述两种方式添加我的类的全局函数和对象,但似乎无法像在类中那样添加属性。

0 投票
2 回答
769 浏览

c++ - Boost.Python 包装层次结构避免菱形继承

我很难看到用 Boost.Python 包装一系列类的最佳方法,同时避免混乱的继承问题。假设我有具有以下结构的 A、B 和 C 类:

我想包装所有类 A、B 和 C,以便它们可以从 Python 扩展。实现这一点的正常方法是:

现在对于从 AI 扩展的类 B 和 C 希望能够继承和共享 A 的包装实现。所以我希望能够按照以下方式做一些事情:

然而,这似乎会引入各种讨厌的方式,即 boost 包装器基的双重继承以及 B_Wrapper 和 C_Wrapper 对象中 A 的双重继承。有没有一种常见的方法可以解决我缺少的这个实例?

谢谢。

0 投票
1 回答
322 浏览

python - 在 Python 中使用 PyObjC 重新解释 CGImageRef

我正在做的事情在标题中总结起来有点复杂,所以请多多包涵。

我正在编写一个 Python 模块,该模块为我的 C++ 库提供了一个接口,该库提供了一些专门的图像处理功能。能够从 Python 以 CGImageRefs 的形式访问图像缓冲区是最方便的,因此可以使用 Quartz 进一步操作它们(使用 PyObjC,效果很好)。

所以我有一个 C++ 函数,它从我自己的图像缓冲区提供 CGImageRef 表示,如下所示:

CGImageRef CreateCGImageRefForImageBuffer(shared_ptr<ImageBuffer> buffer);

我正在使用 Boost::Python 创建我的 Python 桥。导出此函数以便我可以使用 Python 中的 CGImageRef 最简单的方法是什么?

问题: CGImageRef 类型无法直接导出,因为它是指向未定义结构的指针。所以我可以制作一个包装函数,将它包装在 PyCObject 或其他东西中,让它将指针发送到 Python。但是,我如何将这个对象“转换”为 Python 中的 CGImageRef 呢?有没有更好的方法来解决这个问题?

0 投票
1 回答
1519 浏览

c++ - 解释 Python 扩展多线程

Python解释器有一个全局解释器锁,我的理解是扩展必须在多线程环境中获取它。但是Boost.Python HOWTO 页面说扩展功能必须释放 GIL 并在退出时重新获取它。

我想抵制在这里猜测的诱惑,所以我想知道以下场景中的 GIL 锁定模式应该是什么:

  1. 从 python 调用扩展(可能在 python 线程中运行)。
  2. 并且扩展的后台线程回调Py_*函数。

最后一个问题是,为什么链接的文件说 GIL 应该被释放并重新获得?

0 投票
2 回答
3430 浏览

python - 将 `__str__` 方法添加到 Boost Python C++ 类时的构建问题

我已经开始尝试使用 boost python 并遇到了一个问题。我试图将一个 C++ 类暴露给没有问题的 python。但是我似乎无法__str__在不出现我不理解的构建错误的情况下实现该类的功能。

我正在使用 boostpro 的 boost 1_42 prebuild。我使用 cmake 和 vs2010 编译器构建库。

我有一个非常简单的设置。头文件 (tutorial.h) 如下所示:

相应的 cpp 文件如下所示:

CMakeLists.txt 如下所示:

我得到的构建错误如下:

有谁知道出了什么问题?如果我从包装器代码中删除 .def(str(self)) 部分,一切都可以正常编译,并且该类可以从 python 中使用。我将非常感谢您的帮助。

谢谢你,里卡德

编辑:忘记了一个常量

0 投票
3 回答
4641 浏览

c++ - Ubuntu 10.04 中的 Boost.Python 教程

我下载了最新版本的 Boost,我正在尝试在 Ubuntu 10.04 上启动并运行 Boost.python 教程:http: //www.boost.org/doc/libs/1_43_0/libs/python/doc/tutorial/ doc/html/python/hello.html

我导航到正确的目录,运行“bjam”并使用默认设置编译。我还没有创建 bjam 配置文件。编译似乎已经奏效,但现在我不知道如何在我的 python 脚本中包含这些文件。当我尝试运行 python hello world 脚本时,它给了我这个错误:

有谁知道发生了什么?

0 投票
2 回答
1535 浏览

c++ - 如何链接到现有的 boost python 模块

我断断续续地想知道这个问题,但我从来没有真正得到明确的答案。是否可以在 boost.python 框架内链接到另一个 boost.python 模块。

例如,我在 boost_python_module(libA) 中导出了类 A,在 boost_python_module(libB) 中导出了函数 B(A a)。是否可以在 libB 中指定链接到 libA 的 A。

看待这个问题的另一种方式是,现在我必须在一个模块中一次生成所有绑定。是否可以在几个 boost_python_module.