C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – Boost Python中的交叉模块依赖关系大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个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(即它使用模块A中的SomeClass).现在,我执行以下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的类的实例可以传递给在另一个这样的模块中公开的函数.

我使用的是静态二进制文件,并获得了相同类型的错误.一旦我改为动态二进制文件,它编译并运行正常.

大佬总结

以上是大佬教程为你收集整理的c – Boost Python中的交叉模块依赖关系全部内容,希望文章能够帮你解决c – Boost Python中的交叉模块依赖关系所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: