私の C++ コードには、Bar 型の変数を引数として取る多くのメソッドを持つクラス Foo があります。
class Foo {
public:
void do_this(Bar b);
void do_that(Bar b);
/* ... */
};
Bar には、int、std::string、float などの多くの一般的な型から新しいオブジェクトを作成するコンストラクタがいくつかあります。
class Bar {
public:
Bar(int i);
Bar(float f);
Bar(std::string s);
/* ... */
};
これを Boost::Python でラップし、暗黙的に Bar オブジェクトに変換されるため、Python リテラルを直接使用して Foo メソッドを呼び出すことができるようになりました。
f = Foo()
f.do_this(5)
f.do_that("hello")
ここで、次のように、タプルなどの他の Python タイプも使用できるようにしたいと考えています。
f.do_that((1,2,3))
しかし、元の Bar 定義には触れたくありません。また、私の C++ ライブラリを Boost::Python のもので汚したくありません。バインディング コードにラッパー関数を記述したいのですが、これが可能かどうか、およびこれを行う正しい方法がわかりません。
つまり、Python で自動変換として使用するファクトリ関数を登録できますか?