c – 返回对自定义对象的引用时Boost.Python出错
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 返回对自定义对象的引用时Boost.Python出错,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1271字,纯文字阅读大概需要2分钟。
内容图文
![c – 返回对自定义对象的引用时Boost.Python出错](/upload/InfoBanner/zyjiaocheng/721/f2f4107bb427478196049c586f777463.jpg)
编辑:我注意到我的问题不够明确;我没有指定n0是Edge的属性.
我有两个类Nodes和Edges. Edge是定义的(我省略了许多不感兴趣的方法和属性):
class Edge()
{
Node& n0;
public:
const Node& N0() const;
};
访问器编码如下:
Node const& Edge::N0() const
{
return n0;
};
其中n0是Node()实例的私有引用.问题是,在尝试使用以下代码公开此函数时:
class_<Edge>("Edge", init<Node&,Node&>())
.add_property("n0",&Edge::N0,return_internal_reference<>());
(类Node在之前暴露)
我收到错误:
error: cannot create pointer to reference member ‘Edge::n0’
我可以让访问器返回n0的副本,它可以正常工作(测试).但是,如果n0非常重,我宁愿性能问题返回const引用而不是副本.
任何人都可以向我解释我在做什么是错的吗?我对C和Boost.Python很陌生,并且当然对调用策略还不太了解.
解决方法:
所以,我仍然不明白为什么我的原始程序或@ForEveR的解决方案不起作用,但我找到了一个解决方法,它给了我想要的东西.
首先,在定义边类的文件中,我定义了以下函数:
Node const& Edge_get_nodes(Edge& self)
{
return self.N0();
};
我写的包装器:
class_<Edge>("Edge", init<Node&,Node&>())
.add_property("length",&Edge::GetLength)
.def("GetNode",&Edge_get_nodes,return_value_policy<reference_existing_object>());
现在,当我在python中导入模块时,我可以得到n0执行以下操作:
e1.GetNode()
这正是我想要的.谢谢你的帮助!
(如果有人可以向我解释为什么它会像这样工作而不是其他方式,我会很高兴知道!)
内容总结
以上是互联网集市为您收集整理的c – 返回对自定义对象的引用时Boost.Python出错全部内容,希望文章能够帮你解决c – 返回对自定义对象的引用时Boost.Python出错所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。