c++ - 返回对自定义对象的引用时 Boost.Python 出错

标签 c++ boost boost-python

编辑:我注意到我的问题不够清楚;我没有指定 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/

相关文章:

c++ - 模板特化 -> 'too few template-parameter-lists'

c++ - 如何将严重程度与 Boost 日志中的相同宽度对齐

c++ - 当线程安全容器上有大量计算和推送/弹出时,来自 boost asio 的同步或异步更好吗?

python - 我如何从 boost::python 文档字符串创建 doxygen 文档?

python - ImportError : libboost_python. so.1.41.0:无法打开共享对象文件:没有这样的文件或目录

c++ - 编辑函数中指针指向的位置

c++ - 复制构造函数不被继承

c++ - 自动返回类型匹配 void

c++ - boost 范围适配器

c++ - 需要提升 python 显式类型转换