编辑:我注意到我的问题不够清楚;我没有指定 n0 是 Edge 的属性。
我有两个类节点和边。 Edge 已定义(我省略了很多这里不感兴趣的方法和属性):
class Edge()
{
Node& n0;
public:
const Node& N0() const;
};
访问器编码如下:
Node const& Edge::N0() const
{
return n0;
};
其中 n0 是对 Node() 实例的私有(private)引用。问题是,在尝试使用以下代码公开此功能时:
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 的新手,诚然,我还不太了解调用策略。
最佳答案
2 年后,如果您使用 boost::python::make_function
,您仍然可以通过 add_property
实现:
class_<Edge>("Edge", init<Node&,Node&>())
.add_property(
"n0",
make_function(&Edge::N0, return_value_policy<reference_existing_object>()));
关于c++ - 返回对自定义对象的引用时 Boost.Python 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488154/