Noneが使用されている場合、オーバーロードを追加するinit<void*>
とNULLが渡されますが、これがコーナーケースで他のctorにどのように影響するかはわかりません。また、省略した場合、あなたが言及したのと同じNoneからstring const&変換を取得しませんinit<void*>
。Boost.Python1.37およびPython2.6.2の使用。
例:
#include <iostream>
#include <string>
#include <boost/python.hpp>
struct A {
#define BODY { std::cout << __PRETTY_FUNCTION__ << '\n'; }
A() BODY
A(long) BODY
A(std::string const&) BODY
A(void* p) BODY
#undef BODY
};
BOOST_PYTHON_MODULE(ex) {
using namespace boost::python;
class_<A>("A")
.def(init<long>())
.def(init<std::string const&>())
.def(init<void*>())
;
}
>>>インポート例
>>> ex.A()
A :: A()
<例:0x839bf7cのオブジェクト>
>>>例A(42)
A :: A(long int)
<例:0x839bfccのオブジェクト>
>>> ex.A( "abc")
A :: A(const std :: string&)
<例:0x839bf7cのオブジェクト>
>>>例A(なし)
A :: A(void *)
<例:0x839bfccのオブジェクト>
省略されている場合init<void*>
:
>>>例A(なし)
トレースバック(最後の最後の呼び出し):
<module>のファイル"<stdin>"、1行目
Boost.Python.ArgumentError:Python引数タイプ
A .__ init __(A、NoneType)
C ++署名と一致しませんでした:
__init __(_ object *、std :: string)
__init __(_ object *、long)
__init __(_ object *)