gpt4 book ai didi

c++ - Boost Python 中的跨模块依赖关系

转载 作者:太空狗 更新时间:2023-10-29 21:44:39 25 4
gpt4 key购买 nike

假设我有两个定义如下的 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 中的跨模块依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4439361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com