如何使用 boost::python 从流畅的界面公开属性?
我有一个 C++ 类,它提供了一个流利接口,类似于:
class Foo
{
public:
int bar() const { return m_bar; };
Foo& bar(int value) { m_bar = value; return *this; };
private:
int m_bar;
};
我想将 bar()
函数包装为我的 Python 类中的属性。所以我写道:
class_<Foo>("Foo")
.add_property(
"bar",
(int (Foo::*)())&Foo::bar,
(Foo& (Foo::*)(int))&Foo::bar
)
;
但是编译器抱怨 setter,因为它返回一个 Foo&
而不仅仅是 void
。
我可能可以使用 make_function
来指定调用策略,但在这里我陷入困境:我不知道要指定哪个策略(我什至不知道这样的策略是否有效)政策已存在)。
我能做什么来解决这个问题?
这是编译器输出:
/usr/include/boost/python/detail/invoke.hpp:88: 错误:与调用 '(const boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning
) ( Foo&)'
谢谢。
I have a C++ class which presents a fluent interface, something like:
class Foo
{
public:
int bar() const { return m_bar; };
Foo& bar(int value) { m_bar = value; return *this; };
private:
int m_bar;
};
I'd like to wrap the bar()
functions as a property in my Python class. So I wrote:
class_<Foo>("Foo")
.add_property(
"bar",
(int (Foo::*)())&Foo::bar,
(Foo& (Foo::*)(int))&Foo::bar
)
;
But the compiler complains about the setter, because it returns a Foo&
instead of just void
.
I can probably use make_function
to specify a call policy but here I'm stuck: I don't know which policy to specify (I don't even know if such a policy exists).
What can I do to solve this ?
Here is the compiler output:
/usr/include/boost/python/detail/invoke.hpp:88: error: no match for call to '(const boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<Foo&>) (Foo&)'
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最终编写了以下模板函数:
现在我可以输入:
它工作正常:)
I ended up writting the following template function:
And now I can type:
And it works fine :)