5

与えられたクラス:

class TCurrency {
    TCurrency();
    TCurrency(long);
    TCurrency(const std::string);
    ...
};

Boost.Python でラップ:

class_<TCurrency>( "TCurrency" )
    .def( init<long> )
    .def( init<const std::string&> )
    ...
    ;

Python でコンストラクタとして表示されるファクトリ メソッドを作成することは可能ですか。

TCurrency TCurrency_from_Foo( const Foo& ) { return TCurrency(); }

そのようなpythonで:

bar = TCurrency(foo)
4

2 に答える 2

12

使用できますmake_constructor(テストされていません):

TCurrency* TCurrency_from_Foo( const Foo& ) { return new TCurrency(); }

class_<TCurrency>( "TCurrency" )
    .def( "__init__", boost::python::make_constructor( &TCurrency_from_Foo) )
;

make_constructor の引数は、ラップされたクラスへのポインター [1] を返す任意のファンクターです。

[1] 実際には、関数はポインター ホルダー型を返す必要があるため、ポインター ホルダーがboost::shared_ptrの場合、関数は生のポインターではなく boost::shared_ptr を返す必要があります。

于 2010-01-22T17:46:51.290 に答える
0

の例が役立つかもしれません.init_python_object関数は必要なパラメータを取ることができます. 簡単なメモ: class_t を で定義しboost::noncopyable and no_initます。

于 2009-12-11T11:10:22.560 に答える