pybind11 通过引用访问私有 class 成员

pybind11 access private class member via reference

我得到一个 class 和一个私有变量 locked_。可以通过方法 bool& locked();bool locked() const;

访问此变量
class Test {
    
  bool& locked();
  bool locked() const;
    
 private:
  bool locked_{true};
};

我不允许更改 class Test,但我必须编写一个允许设置和检索 locked_.

的 pybind11 接口

我不能使用 .def_readwrite("locked", &Test::locked_); 因为 locked_ 当然是私有的。 我尝试使用

.def("locked", static_cast<bool& (Test::*)()>(&Test::locked), "locked", py::return_value_policy::reference_internal);

确实编译了,但是只是 return 一个 bool 而不是对 bool 的某种可修改引用。

如何在不“接触”原始 C++ 实现的情况下使锁定 read/write 可访问。

我仍然不了解 pybind,但我开始从您的问题中学习并且我记得 def 接受 lambda。您可以像这样包装对成员的调用:

auto locker = [](Test& t, bool lock) { t.locked() = lock; };

我不确定你是否需要做一些额外的事情来使 def 与你的自定义 Test 一起工作,所以我想它可以像这样使用:

m.def("locker", locker);