次のメソッドを持つ C++ クラスがあります。
class Bar {
...
const Foo& getFoo() const;
void setFoo(const Foo&);
};
classFoo
は変換可能ですstd::string
(暗黙のコンストラクター fromstd::string
とstd::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
ので、重複は望ましくありません。