Boost Python 中的跨模块依赖

2023-11-24

假设我有两个 boost python 模块,定义如下。模块A:

class SomeClass {
public:
    SomeClass() {}
    ~SomeClass() {}
};
BOOST_PYTHON_MODULE(A)
{   
    class_<SomeClass>("SomeClass");
}

和模块B:

class AnotherClass {
public:
    AnotherClass() {}
    ~AnotherClass() {}
    void func(SomeClass& sp) {}
};
BOOST_PYTHON_MODULE(B)
{   class_<AnotherClass>("AnotherClass")
        .def("func", &AnotherClass::func)
    ;
}

模块 B 依赖于模块 A(即它使用SomeClass来自模块 A)。现在,我执行以下 python 脚本:

import A
import B
obj1 = A.SomeClass()
obj2 = B.AnotherClass()
obj2.func(obj1)

我收到以下错误:

Traceback (most recent call last):
  File "C:\bladiebla\script.py", line 8, in <module>
    obj2.func(obj1)
ArgumentError: Python argument types in
AnotherClass.func(AnotherClass, SomeClass)
did not match C++ signature:
func(class AnotherClass {lvalue}, class SomeClass)

Python 似乎不会自动在模块之间转换类。有谁知道如何解决这个问题?


我最近刚刚开始摆弄 Boost.Python 并遇到了同样的问题。

查看以下文档的第 6 节:

http://www.boost.org/doc/libs/1_47_0/libs/python/doc/building.html

6.1 - 动态二进制

该库包含一个类型转换注册表。由于一个注册表在所有扩展模块之间共享,因此在一个动态加载的扩展模块中向 Python 公开的类的实例可以传递给在另一个此类模块中公开的函数.

我使用的是静态二进制文件,并遇到了与您相同类型的错误。一旦我更改为动态二进制文件,它就编译并运行良好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Boost Python 中的跨模块依赖 的相关文章

随机推荐

  • Python 的 imp.reload() 函数不起作用?

    这是一个简洁的例子 x py class x var from x py y py class x var from y py test py import imp def write module filename fp open z p
  • Javascript 中的块作用域、函数作用域和局部作用域

    Is 块作用域有时与功能范围 我知道功能范围适用于函数内的所有内容 但不知道 a 到底是什么块作用域 is 对于Javascript来说 是吗 现在推荐使用let const代替var以便日后维护 这是来自Airbnb 风格指南 javas
  • 远程调试Azure网站:未命中断点

    我有一个部署到 Azure 的 ASP NET 网站 我正在使用 VS2013 NET 4 5 1 和 Azure SDK 2 2 我在管理门户中打开了VS2013的远程调试 我可以成功右键单击服务器中 Azure 节点下的网站 然后选择
  • 如何打印 HTML 页面的一部分?

    我有一个 html 页面 我想打印该 html 页面的一部分 我知道打印页面的 javascript 函数 onClick javascript window print return false 但如何打印页面的一部分呢 如果有人有想法
  • 将单键字典列表转换为单个字典

    我有一个单键字典列表 例如 lst 1 A 2 B 3 C 我想简单地将其转换为普通字典 dictionary 1 A 2 B 3 C 最简洁 最有效的方法是什么 您可以使用减少 reduce lambda r d r update d o
  • 将 Winform 应用程序转换为控制台应用程序

    是否有一种快速而肮脏的方法 或 VS 宏 将 WinForms 应用程序转换为控制台应用程序 我有许多此类应用程序不再需要作为 Winforms 应用程序 我想我可以创建一堆新项目并复制粘贴模块和类 但如果只是删除我拥有的单一表单并编辑 删
  • 从URL中获取参数值

    我正在开发一个工具 它可以获取 URL 中的值参数并用它们做一些事情 我的问题是 我似乎无法使用 document location 来显示我想要的具体值 例如 www examplesite com yourname gilgilad 我
  • 在android布局中创建水平虚线

    在我的布局中 我试图绘制一条虚线 为了绘制一条水平线 我在布局文件中定义了一个视图
  • 优化 Karatsuba 实施

    所以 我正在尝试改进 net 4 的一些操作BigInteger类提供 因为操作看起来是二次的 我已经做了一个粗略的 Karatsuba 实现 但它仍然比我预期的要慢 主要问题似乎是 BigInteger 没有提供简单的方法来计算位数 因此
  • 通过 Java 应用程序启动外部 Jar

    目前 我有一个 Java 独立 Swing 应用程序 现在 当用户单击 Swing 应用程序中的按钮时 我想启动另一个 Java 应用程序 例如 calculator jar 我可以知道什么是便携式方法吗 那么它可以在多个操作系统中工作吗
  • 在 MATLAB 中将零对角线添加到矩阵

    假设我有一个矩阵A维度的Nx N 1 在 MATLAB 中 例如 N 5 A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 我想转型A进入一个NxN matrix B 只需添加零对角线
  • 关于链表中的虚拟节点和指针的说明

    我有以下列表节点类 def init self x self val x self next None 如果我初始化列表l and r如下 l ListNode 1 l next ListNode 4 l next next ListNod
  • 使用 pymongo 连接到 aws 时出现 ServerSelectionTimeoutError

    我正在尝试使用密钥文件连接到 AWS 实例上托管的 MongoDB 我能够通过 ssh 进入实例并连接到数据库 没有任何问题 当我尝试使用 pymongo 从远程位置连接到数据库时 我收到此错误 ServerSelectionTimeout
  • Ipython、jupyter 和内核之间有什么关系?

    就像每次我寻找有关 python 或 R 的答案时 我都会遇到 Ipython Ipython kernel Ipython Notebook jupyter 和 jupyter kernel 的这些含义 并且我实际上了解每个的用途 但我对
  • 如何修复 Heroku imagecreatefromjpeg()

    heroku 报告我一个错误 Call to undefined function imagecreatefromjpeg at line 177 其中第 177 行是 案例 jpg 案例 jpeg image data imagecrea
  • Python如何获取QLineEdit文本?

    你好世界我正在尝试让 QLineEdit 作为用户输入来工作 他们应该输入歌曲名称 输入歌曲名称后 我希望单击播放按钮后开始播放该歌曲 除了他们可以在该文件夹中输入所需歌曲的部分之外 一切正常 问题是我不确定如何制作 QlineEdit 单
  • 使用指针算术计算类型大小的替代方法

    下面的代码是100 可移植的吗 int a 10 size t size of int char a 1 char a No problem here std cout lt
  • 两个表的索引名称相同

    我正在为我们的团队构建一个小型 Mysql 数据库 对于我的数据库中的两个表 我使用了相同的索引名称 性能会受到影响吗 我做了一些测试查询 800 000 多行 到目前为止 一切顺利 索引名称特定于每个表 一张表中不能有两个同名索引 但可以
  • 如何在 Scala 中定义列表的列表?

    我想为以下类型创建一个存储 List List 2 3 1 1 List 2 2 1 但如果我执行以下操作 var y List List 1 0 2 2 List 2 1 1 2 1 然后它创建为 List AnyVal 并在我尝试执行数
  • Boost Python 中的跨模块依赖

    假设我有两个 boost python 模块 定义如下 模块A class SomeClass public SomeClass SomeClass BOOST PYTHON MODULE A class