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