0

ミツバというソフトを使っています。Boost でラップされた Python 実装が付属しています。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> > > > >)

さらにどのような調査を行うことができますか? 問題がどこから来るか知っていますか?

4

2 に答える 2

2

残念ながら、どの引数が問題を引き起こしているのかは明確ではありません。

あなたが持っているエラーメッセージによると、戻り値の型fileResolver.resolveはどうやらstrではなくboost::filesystem::basic_pathです。注目したいのは、Mitsuba が Boost.Python インターフェイスを定義して、Python 文字列をboost::fs::pathオブジェクトに変換するための「コンバーター」が登録されているかどうかを確認する場所です。そうでない場合は、正しい型に変換可能な Python オブジェクトを取得する正しい方法が、このライブラリに対してどのようなものであるかを理解する必要があります。

StringMap2 番目の引数については、すでに Boost.Python 型でない限り、基本的に同じチェックを行う必要があります(何がtype(paramMap.__class__)返されるか)。のtypedefのようParameterMapです

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

ただし、Python 型からの変換を実行できる Boost.Python コンバーターが登録されている必要があります。

于 2012-06-05T21:05:41.400 に答える
0

このバグはしばらくの間修正されていることに注意してください。現在、C++/Python バリアを越えるときに fs::path と std::string の間で双方向に行われる暗黙的な変換があります。

于 2013-11-22T11:11:03.923 に答える