c++ - 使用由 Boost : did not match C++ signature 生成的 Python 模块

标签 c++ python visual-studio-2010 boost

我正在使用一个名为 Mitsuba 的软件。它带有一个 Python 实现,用 Boost 包装。 Python 中的这一行:

scene = SceneHandler.loadScene(fileResolver.resolve("model.xml"), paramMap)

产生错误。根据文档,fileResolver.resolve的类型是fs::path,paramMap的类型是ParameterMap。

C++ 代码中的函数签名是:

SceneHandler::loadScene(const fs::path &filename, const ParameterMap &params) 

错误是:

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。您要查看的是 Mitsuba 定义其 Boost.Python 接口(interface)的位置,以查看是否注册了一个“转换器”,用于将 Python 字符串转换为 boost::fs::path 对象。如果没有,您将不得不弄清楚为该库获取可转换为正确类型的 Python 对象的正确方法是什么。

对于第二个参数,您需要进行基本相同的检查,除非 StringMap 已经是一个 Boost.Python 类型(type(paramMap.__class__) 返回什么?)。看起来 ParameterMap 是一个 typedef for

`std::map<std::string, std::string, mitsuba::SimpleStringOrdering>`

但同样,必须有一个 Boost.Python 转换器已注册,可以从 Python 类型进行转换。

关于c++ - 使用由 Boost : did not match C++ signature 生成的 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901173/

相关文章:

c++ - 转换为无符号时,标准表示结果为 "the least unsigned integer"。为什么 "least"在这里很重要?

visual-studio-2010 - 您可以将生成的文件包含到 WiX 项目中而不将其添加为现有文件吗

c++ - 我如何 static_assert 解析为 const& 的值是正确的类型?

C++设置容器不能删除奇数

python - 潜在语义分析结果

python - 一维和二维数组之间的元素明智比较

python - 如何在Python中应用具有固定x截距的线性回归?

.NET WinForms 本地化 - 替换 ComponentResourceManager

c# - VS2010 不会在 64 位版本的 Windows 上的 WinForms 应用程序中显示未处理的异常消息

c++ - 捕获 ListView 控件上的键盘输入,C++