1

複数のコンストラクター メソッドを持つクラスを定義しようとしていますが、そのうちのいくつかはキーワード引数を取ります。コンストラクターに不適切なパラメーター リストが渡されるまで、すべてが期待どおり/意図したとおりに機能します。この場合、インタープリターは例外をスローする代わりに終了します。最小限の例を次に示します。

#include <boost/python.hpp>
#include <string>

class Crash {
  public:
    Crash(std::string) { }
    Crash(int, int) { }
};

BOOST_PYTHON_MODULE(mymodule) {
    using namespace boost::python;

    class_<Crash>("Crash", init<std::string>())
        .def(init<int, int>((arg("i") = 3)))
    ;
}

出力:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymodule as mm
>>> mm.Crash("asdf")
<mymodule.Crash object at 0x00D9FB70>
>>> mm.Crash(3)
<mymodule.Crash object at 0x00D9FE10>
>>> mm.Crash(4, i=5)
<mymodule.Crash object at 0x00D9FB70>
>>> mm.Crash(i=3) # kills the interpreter

のような無効なキーワードを入力Crash(blah=4)すると、インタプリタも強制終了されます。

これは Boost.Python のバグですか、それとも何か間違っていますか?

Boost 1.51 / Python 2.7.3 / MSVC 9.0 を使用しています。

4

0 に答える 0