boost::python 可转换字符串的属性
我有一个C++类,里面有以下几个方法:
class Bar {
...
const Foo& getFoo() const;
void setFoo(const Foo&);
};
这个类叫做 Foo
,它可以转换成 std::string
(也就是说,它有一个可以隐式调用的构造函数,可以从 std::string
创建对象,还有一个可以把 Foo
转换成 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
我该如何实现这种转换,而不需要写太多重复的包装函数?(因为我已经在 Foo
类里有了所有的转换函数,所以不想重复写。)