假设我有两个 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(使用前将#替换为@)