使用使用 Boost 生成的 Python 模块:与C++签名不匹配
Using a Python module generated with Boost: did not match C++ signature
我正在使用一个名为Mitsuba的软件。它附带了一个Python实现,用Boost包装。Python中的这一行:
scene = SceneHandler.loadScene(fileResolver.resolve("model.xml"), paramMap)
产生错误。根据文档,fileResolver.resolve 的类型是 fs::p ath,paramMap 的类型是 ParameterMap。
C++代码中的函数签名为:
SceneHandler::loadScene(const fs::path &filename, const ParameterMap ¶ms)
错误是:
Traceback (most recent call last):
File "...foo.py", line 22, in <module>
scene = SceneHandler.loadScene(fileResolver.resolve("model.xml"), paramMap)
ArgumentError: Python argument types in
SceneHandler.loadScene(str, StringMap)
did not match C++ signature:
loadScene(class boost::filesystem2::basic_path<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct boost::filesystem2::path_traits>, class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct mitsuba::SimpleStringOrdering,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > >)
我可以进行哪些进一步的调查?你知道问题出在哪里吗?
不幸的是,
目前尚不清楚哪个参数导致了问题。
根据您收到的错误消息,fileResolver.resolve
的返回类型显然是 str
,而不是boost::filesystem::basic_path
。你想看的是三叶定义其Boost.Python接口的地方,以查看是否有注册的"转换器"将Python字符串转换为boost::fs::path
对象。如果没有,你必须弄清楚对于这个库,获取可转换为正确类型的 Python 对象的正确方法是什么。
对于第二个参数,你基本上要进行相同的检查,除非StringMap
已经是 Boost.Python 类型(type(paramMap.__class__)
返回什么?)。看起来ParameterMap
是一个类型定义
`std::map<std::string, std::string, mitsuba::SimpleStringOrdering>`
但同样,必须注册一个 Boost.Python 转换器,它可以从 Python 类型进行转换。
请注意
,这个错误已经修复了一段时间——现在有一个隐式转换,当跨越 C++/Python 障碍时,它会在 fs::p ath 和 std::string 之间双向进行。
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 模板专用化与派生类不匹配