我有一个C++类,希望暴露给Python。(假设这个类已经编写好了,不能轻易修改)。在这个类中,有一个成员是一个指针,我也想公开这个成员。下面是代码的最小版本。
struct C {
C(const char* _a) { a = new std::string(_a); }
~C() { delete a; }
std::string *a;
};
BOOST_PYTHON_MODULE(text_detection)
{
class_<C>("C", init<const char*>())
.def_readonly("a", &C::a);
}
它编译得很好,除了当我试图访问该字段时出现了一个Python运行时错误:
>>> c = C("hello")
>>> c.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: No to_python (by-value) converter found for C++ type: std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*
这是可以理解的但问题是,是否有可能通过Boost Python公开成员指针a
?怎么做?
1条答案
按热度按时间j2cgzkjk1#
不使用
def_readonly
,而是使用带有自定义getter的add_property
。您需要将getter封装在make_function
中,由于getter返回const&
,因此还必须指定return_value_policy
。Live demo