我有一个 C++ 类,它有以下方法:
class Bar {
...
const Foo& getFoo() const;
void setFoo(const Foo&);
};
其中类Foo
可转换为std::string
(它有一个隐式构造函数 fromstd::string
和一个强制转换std::string
运算符)。
我定义了一个 Boost.Python 包装类,除其他外,它定义了一个基于前两个函数的属性:
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
,因此不希望出现重复。