5

次のメソッドを持つ C++ クラスがあります。

class Bar {
...
    const Foo& getFoo() const;
    void setFoo(const Foo&);
};

classFooは変換可能ですstd::string(暗黙のコンストラクター fromstd::stringstd::stringキャスト演算子があります)。

Boost.Python ラッパー クラスを定義します。これは、とりわけ、前の 2 つの関数に基づいてプロパティを定義します。

class_<Bar>("Bar")
    ...
    .add_property(
        "foo",
        make_function(
            &Bar::getFoo,
            return_value_policy<return_by_value>()),
        &Bar::setFoo)
    ...

また、クラスを との間で変換可能としてマークしstd::stringます。

implicitly_convertible<std::string, Foo>();
implicitly_convertible<Foo, std::string>();

しかし、実行時にこのプロパティにアクセスしようとすると、変換エラーが発生します。

TypeError: No to_python (by-value) converter found for C++ type: Foo

ラッパー関数のボイラープレートが多すぎずに変換を達成するにはどうすればよいですか? (私はすでに class にすべての変換関数を持っているFooので、重複は望ましくありません。

4

1 に答える 1

2

Boost.Python FAQ のカスタム文字列クラス変換の例に似たものをあきらめて実装することになりました。これは少し冗長ですが、宣伝どおりに機能します。

于 2010-05-05T08:36:24.763 に答える